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