1require_relative 'test_base'
2require 'dl/import'
3require 'dl/types'
4
5class DL::TestWin32 < DL::TestBase
6module Win32API
7  extend DL::Importer
8
9  dlload "kernel32.dll"
10
11  include DL::Win32Types
12
13  OSVERSIONINFO = struct [
14    "DWORD dwOSVersionInfoSize",
15    "DWORD dwMajorVersion",
16    "DWORD dwMinorVersion",
17    "DWORD dwBuildNumber",
18    "DWORD dwPlatformId",
19    "UCHAR szCSDVersion[128]",
20  ]
21
22  typealias "POSVERSIONINFO", "OSVERSIONINFO*"
23
24  extern "BOOL GetVersionEx(POSVERSIONINFO)", :stdcall
25
26  def get_version_ex()
27    ptr = OSVERSIONINFO.malloc()
28    ptr.dwOSVersionInfoSize = OSVERSIONINFO.size
29    ret = GetVersionEx(ptr)
30    if( ret )
31      ptr
32    else
33      nil
34    end
35  end
36  module_function :get_version_ex
37rescue DL::DLError
38end
39
40if defined?(Win32API::OSVERSIONINFO)
41  def test_version()
42    platform = Win32API.get_version_ex().dwPlatformId
43    case ENV['OS']
44    when 'Windows_NT'
45      expect = 2
46    when /Windows.+/
47      expect = 1
48    else
49      expect = 0
50    end
51    assert_equal(expect, platform)
52  end
53end
54end
55