win 0.3.11 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +20 -0
- data/VERSION +1 -1
- data/lib/win/gui/dialog.rb +30 -30
- data/lib/win/gui/input.rb +0 -1
- data/lib/win/gui/message.rb +25 -2
- data/lib/win/library.rb +114 -70
- data/lib/win/system/info.rb +163 -0
- data/lib/win/system/version.rb +571 -0
- data/spec/spec_helper.rb +15 -3
- data/spec/win/error_spec.rb +2 -2
- data/spec/win/gui/message_spec.rb +23 -7
- data/spec/win/library_spec.rb +181 -155
- data/spec/win/system/info_spec.rb +47 -0
- data/spec/win/system/version_spec.rb +169 -0
- metadata +9 -3
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
require 'win/system/info'
|
3
|
+
|
4
|
+
module WinSystemInfoTest
|
5
|
+
|
6
|
+
include WinTestApp
|
7
|
+
include Win::System::Info
|
8
|
+
|
9
|
+
describe Win::System::Info do
|
10
|
+
describe "#get_computer_name" do
|
11
|
+
spec{ use{ success = GetComputerName(buf = buffer, pointer.write_long(buf.size)) }}
|
12
|
+
spec{ use{ name = get_computer_name() }}
|
13
|
+
|
14
|
+
it "original api retrieves the NetBIOS name of the local computer " do
|
15
|
+
name_ptr = FFI::MemoryPointer.from_string(" " * 128)
|
16
|
+
size_ptr = FFI::MemoryPointer.new(:long).write_int(name_ptr.size)
|
17
|
+
success = GetComputerName(name_ptr, size_ptr)
|
18
|
+
success.should_not == 0
|
19
|
+
name_ptr.read_string.should == `hostname`.strip.upcase
|
20
|
+
end
|
21
|
+
|
22
|
+
it "snake api retrieves the NetBIOS name of the local computer" do
|
23
|
+
get_computer_name.strip.should == `hostname`.strip.upcase
|
24
|
+
end
|
25
|
+
end # describe get_computer_name
|
26
|
+
|
27
|
+
describe "#get_user_name" do
|
28
|
+
spec{ use{ success = GetUserName(buf = buffer, pointer.write_long(buf.size)) }}
|
29
|
+
spec{ use{ username = get_user_name() }}
|
30
|
+
|
31
|
+
it "original api to retrieve the user name in a specified format. Additional information " do
|
32
|
+
username = `echo %USERNAME%`.strip
|
33
|
+
name_ptr = FFI::MemoryPointer.from_string(" " * 128)
|
34
|
+
size_ptr = FFI::MemoryPointer.new(:long).write_int(name_ptr.size)
|
35
|
+
success = GetUserName(name_ptr, size_ptr)
|
36
|
+
success.should_not == 0
|
37
|
+
name_ptr.read_string.strip.should == username
|
38
|
+
end
|
39
|
+
|
40
|
+
it "snake_case api to retrieve the user name in a specified format. Additional information " do
|
41
|
+
username = `echo %USERNAME%`.strip
|
42
|
+
get_user_name.strip.should == username
|
43
|
+
end
|
44
|
+
end # describe get_user_name
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
require 'win/system/version'
|
3
|
+
|
4
|
+
module WinSystemInfoTest
|
5
|
+
|
6
|
+
include WinTestApp
|
7
|
+
include Win::System::Version
|
8
|
+
|
9
|
+
def should_be_correct_os(type= :info, object)
|
10
|
+
case type
|
11
|
+
when :info
|
12
|
+
object.should be_an OSVERSIONINFOEX
|
13
|
+
major = object[:dw_major_version]
|
14
|
+
minor = object[:dw_minor_version]
|
15
|
+
build = object[:dw_build_number]
|
16
|
+
when :version
|
17
|
+
object.should be_an Array
|
18
|
+
major = object[0]
|
19
|
+
minor = object[1]
|
20
|
+
build = object[2]
|
21
|
+
end
|
22
|
+
os_major, os_minor, os_build = os_version_numbers
|
23
|
+
major.should == os_major
|
24
|
+
minor.should == os_minor
|
25
|
+
build.should == os_build
|
26
|
+
end
|
27
|
+
|
28
|
+
def os_version_numbers
|
29
|
+
os_ver = os.match(/Version ([\d]{1,2})\.([\d]{1,2})\.([\d]{1,5})/ )
|
30
|
+
os_ver.captures.map(&:to_i)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe Win::System::Version do
|
34
|
+
before(:each) do
|
35
|
+
@ver_info = OSVERSIONINFOEX.new
|
36
|
+
@ver_info[:dw_os_version_info_size] = @ver_info.size
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#get_version" do
|
40
|
+
spec{ use{ success = GetVersion() }}
|
41
|
+
spec{ use{ version = get_version() }}
|
42
|
+
|
43
|
+
it "original api retrieves information about the current operating system (in a cryptic Integer)" do
|
44
|
+
GetVersion().should be_an Integer
|
45
|
+
GetVersion().should be > 0
|
46
|
+
end
|
47
|
+
|
48
|
+
it "snake_case api returns an Array [major, minor, build] of OS version numbers" do
|
49
|
+
version = get_version()
|
50
|
+
version.should be_an Array
|
51
|
+
version.should have_exactly(3).numbers
|
52
|
+
should_be_correct_os :version, version
|
53
|
+
end
|
54
|
+
end # describe get_version
|
55
|
+
|
56
|
+
describe "#get_version_ex" do
|
57
|
+
spec{ use{ success = GetVersionEx(@ver_info.to_ptr) }}
|
58
|
+
spec{ use{ ver_info = get_version_ex() }}
|
59
|
+
|
60
|
+
it "original api returns success code (0/1) and fills supplied OSVERSIONINFOEX struct" do
|
61
|
+
GetVersionEx(@ver_info.to_ptr).should_not == 0
|
62
|
+
should_be_correct_os :info, @ver_info
|
63
|
+
end
|
64
|
+
|
65
|
+
it "snake_case api returns fills given OSVERSIONINFOEX struct and returns it" do
|
66
|
+
info = get_version_ex(@ver_info)
|
67
|
+
info.should == @ver_info
|
68
|
+
should_be_correct_os :info, info
|
69
|
+
end
|
70
|
+
|
71
|
+
it "snake_case api returns filled OSVERSIONINFOEX struct if no arg given" do
|
72
|
+
info = get_version_ex()
|
73
|
+
should_be_correct_os :info, info
|
74
|
+
end
|
75
|
+
end # describe get_version_ex
|
76
|
+
|
77
|
+
describe "#ver_set_condition_mask" do
|
78
|
+
spec{ use{ mask = VerSetConditionMask(dwl_condition_mask=0, dw_type_bit_mask=0, dw_condition_mask=0) }}
|
79
|
+
spec{ use{ mask = ver_set_condition_mask(dwl_condition_mask=0, dw_type_bit_mask=0, dw_condition_mask=0) }}
|
80
|
+
|
81
|
+
it "is used to build the dwlConditionMask parameter for the VerifyVersionInfo function" do
|
82
|
+
mask1 = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL)
|
83
|
+
mask2 = ver_set_condition_mask(0, VER_MAJORVERSION, VER_EQUAL)
|
84
|
+
mask1.should be_an Integer
|
85
|
+
mask1.should == mask2
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'snake api accepts both single type/condition pair or an Array of type/condition pairs' do
|
89
|
+
it 'with single condition' do
|
90
|
+
mask1 = ver_set_condition_mask(0, VER_MAJORVERSION, VER_EQUAL)
|
91
|
+
mask2 = ver_set_condition_mask(VER_MAJORVERSION, VER_EQUAL)
|
92
|
+
mask3 = ver_set_condition_mask([VER_MAJORVERSION, VER_EQUAL])
|
93
|
+
mask4 = ver_set_condition_mask([[VER_MAJORVERSION, VER_EQUAL]])
|
94
|
+
mask1.should == mask2
|
95
|
+
mask1.should == mask4
|
96
|
+
mask1.should == mask3
|
97
|
+
end
|
98
|
+
it 'with multiple conditions' do
|
99
|
+
mask1 = ver_set_condition_mask(0, [[VER_MAJORVERSION, VER_EQUAL], [VER_MINORVERSION, VER_EQUAL]])
|
100
|
+
mask2 = ver_set_condition_mask([[VER_MAJORVERSION, VER_EQUAL], [VER_MINORVERSION, VER_EQUAL]])
|
101
|
+
mask3 = ver_set_condition_mask(0, [VER_MAJORVERSION, VER_EQUAL, VER_MINORVERSION, VER_EQUAL])
|
102
|
+
mask4 = ver_set_condition_mask([VER_MAJORVERSION, VER_EQUAL, VER_MINORVERSION, VER_EQUAL])
|
103
|
+
mask1.should == mask2
|
104
|
+
mask1.should == mask3
|
105
|
+
mask1.should == mask4
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end # describe ver_set_condition_mask
|
109
|
+
|
110
|
+
describe "#verify_version_info" do
|
111
|
+
before(:each) do
|
112
|
+
# Preparing condition mask
|
113
|
+
@mask_equal = ver_set_condition_mask(0, VER_MAJORVERSION, VER_EQUAL)
|
114
|
+
@mask_equal = ver_set_condition_mask(@mask_equal, VER_MINORVERSION, VER_EQUAL)
|
115
|
+
|
116
|
+
# Preparing expected version info
|
117
|
+
@expected = OSVERSIONINFOEX.new
|
118
|
+
@expected[:dw_os_version_info_size] = @expected.size
|
119
|
+
@expected[:dw_major_version] = os_version_numbers[0]
|
120
|
+
@expected[:dw_minor_version] = os_version_numbers[1]
|
121
|
+
end
|
122
|
+
|
123
|
+
spec{ use{ verified = VerifyVersionInfo(@expected.to_ptr, dw_type_mask=VER_MAJORVERSION, dwl_condition_mask=@mask_equal) }}
|
124
|
+
spec{ use{ verified = verify_version_info(@expected.to_ptr, dw_type_mask=VER_MAJORVERSION, dwl_condition_mask=@mask_equal) }}
|
125
|
+
|
126
|
+
it "returns 1/true if current OS features are in line with expected features " do
|
127
|
+
VerifyVersionInfo(@expected.to_ptr, VER_MAJORVERSION | VER_MINORVERSION, @mask_equal).should == 1
|
128
|
+
verify_version_info(@expected.to_ptr, VER_MAJORVERSION | VER_MINORVERSION, @mask_equal).should == true
|
129
|
+
end
|
130
|
+
|
131
|
+
it "returns 0/false if current OS features are different from expected" do
|
132
|
+
@expected[:dw_major_version] = 1
|
133
|
+
VerifyVersionInfo(@expected.to_ptr, VER_MAJORVERSION | VER_MINORVERSION, @mask_equal).should == 0
|
134
|
+
verify_version_info(@expected.to_ptr, VER_MAJORVERSION | VER_MINORVERSION, @mask_equal).should == false
|
135
|
+
end
|
136
|
+
end # describe verify_version_info
|
137
|
+
|
138
|
+
describe "convenience version checking methods" do
|
139
|
+
it 'returns true for current OS type, false otherwise' do
|
140
|
+
case
|
141
|
+
when os_2000?
|
142
|
+
windows_2000?.should == true
|
143
|
+
windows_xp?.should == false
|
144
|
+
windows_2003?.should == false
|
145
|
+
windows_vista?.should == false
|
146
|
+
windows_7?.should == false
|
147
|
+
when os_xp?
|
148
|
+
windows_2000?.should == false
|
149
|
+
windows_xp?.should == true
|
150
|
+
windows_2003?.should == false
|
151
|
+
windows_vista?.should == false
|
152
|
+
windows_7?.should == false
|
153
|
+
when os_vista?
|
154
|
+
windows_2000?.should == false
|
155
|
+
windows_xp?.should == false
|
156
|
+
windows_2003?.should == false
|
157
|
+
windows_vista?.should == true
|
158
|
+
windows_7?.should == false
|
159
|
+
when os_7?
|
160
|
+
windows_2000?.should == false
|
161
|
+
windows_xp?.should == false
|
162
|
+
windows_2003?.should == false
|
163
|
+
windows_vista?.should == false
|
164
|
+
windows_7?.should == true
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 16
|
9
|
+
version: 0.3.16
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- arvicco
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-11 00:00:00 +04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -78,6 +78,8 @@ files:
|
|
78
78
|
- lib/win/gui/window.rb
|
79
79
|
- lib/win/gui.rb
|
80
80
|
- lib/win/library.rb
|
81
|
+
- lib/win/system/info.rb
|
82
|
+
- lib/win/system/version.rb
|
81
83
|
- lib/win.rb
|
82
84
|
- spec/extension_spec.rb
|
83
85
|
- spec/spec.opts
|
@@ -90,6 +92,8 @@ files:
|
|
90
92
|
- spec/win/gui/message_spec.rb
|
91
93
|
- spec/win/gui/window_spec.rb
|
92
94
|
- spec/win/library_spec.rb
|
95
|
+
- spec/win/system/info_spec.rb
|
96
|
+
- spec/win/system/version_spec.rb
|
93
97
|
- features/step_definitions/win_steps.rb
|
94
98
|
- features/support/env.rb
|
95
99
|
- features/win.feature
|
@@ -152,3 +156,5 @@ test_files:
|
|
152
156
|
- spec/win/gui/message_spec.rb
|
153
157
|
- spec/win/gui/window_spec.rb
|
154
158
|
- spec/win/library_spec.rb
|
159
|
+
- spec/win/system/info_spec.rb
|
160
|
+
- spec/win/system/version_spec.rb
|