windows-api 0.4.3 → 0.4.4

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.
@@ -1,60 +1,60 @@
1
- require 'windows/unicode'
2
- require 'windows/msvcrt/string'
3
-
4
- # This is a class that simplifies wide string handling. It is NOT meant
5
- # for general consumption, but for internal use by the Win32Utils Team.
6
- # Use at your own risk.
7
- #
8
- class WideString < String
9
- include Windows::Unicode
10
- include Windows::MSVCRT::String
11
-
12
- ACP = CP_ACP
13
- UTF7 = CP_UTF7
14
- UTF8 = CP_UTF8
15
-
16
- # Get or set the encoding of the wide string object
17
- #
18
- attr_accessor :encoding
19
-
20
- # Creates a new wide +string+ with the given +encoding+, or UTF8 if
21
- # no encoding is specified.
22
- #
23
- def initialize(string, encoding = UTF8)
24
- super(multi_to_wide(string, encoding))
25
- @encoding = encoding
26
- end
27
-
28
- # Returns the multibyte version of the wide string.
29
- #
30
- def to_multi
31
- wide_to_multi(self, @encoding)
32
- end
33
-
34
- # Replaces the wide string with a multibyte version.
35
- #
36
- def to_multi!
37
- self.replace(wide_to_multi(self, @encoding))
38
- end
39
-
40
- alias to_s to_multi
41
- alias to_str to_multi
42
- alias inspect to_multi
43
-
44
- # Strips the trailing two null characters from the string.
45
- #
46
- def wstrip
47
- self[0..-3] if string[-2..-1] == "\000\000"
48
- end
49
-
50
- # The length of the wide string in chars.
51
- #
52
- def length
53
- wcslen(self) * 2
54
- end
55
-
56
- # The size of the wide string in bytes.
57
- def size
58
- wcslen(self)
59
- end
1
+ require 'windows/unicode'
2
+ require 'windows/msvcrt/string'
3
+
4
+ # This is a class that simplifies wide string handling. It is NOT meant
5
+ # for general consumption, but for internal use by the Win32Utils Team.
6
+ # Use at your own risk.
7
+ #
8
+ class WideString < String
9
+ include Windows::Unicode
10
+ include Windows::MSVCRT::String
11
+
12
+ ACP = CP_ACP
13
+ UTF7 = CP_UTF7
14
+ UTF8 = CP_UTF8
15
+
16
+ # Get or set the encoding of the wide string object
17
+ #
18
+ attr_accessor :encoding
19
+
20
+ # Creates a new wide +string+ with the given +encoding+, or UTF8 if
21
+ # no encoding is specified.
22
+ #
23
+ def initialize(string, encoding = UTF8)
24
+ super(multi_to_wide(string, encoding))
25
+ @encoding = encoding
26
+ end
27
+
28
+ # Returns the multibyte version of the wide string.
29
+ #
30
+ def to_multi
31
+ wide_to_multi(self, @encoding)
32
+ end
33
+
34
+ # Replaces the wide string with a multibyte version.
35
+ #
36
+ def to_multi!
37
+ self.replace(wide_to_multi(self, @encoding))
38
+ end
39
+
40
+ alias to_s to_multi
41
+ alias to_str to_multi
42
+ alias inspect to_multi
43
+
44
+ # Strips the trailing two null characters from the string.
45
+ #
46
+ def wstrip
47
+ self[0..-3] if string[-2..-1] == "\000\000"
48
+ end
49
+
50
+ # The length of the wide string in chars.
51
+ #
52
+ def length
53
+ wcslen(self) * 2
54
+ end
55
+
56
+ # The size of the wide string in bytes.
57
+ def size
58
+ wcslen(self)
59
+ end
60
60
  end
@@ -1,171 +1,171 @@
1
- ############################################################################
2
- # test_windows_api.rb
3
- #
4
- # Test case for the Windows::API class. You should run this as Rake task,
5
- # i.e. 'rake test', instead of running it directly.
6
- ############################################################################
7
- require 'windows/api'
8
- require 'test-unit'
9
- include Windows
10
-
11
- module Windows
12
- module Test
13
- API.auto_namespace = 'Windows::Test'
14
- API.auto_unicode = true
15
- API.auto_method = true
16
- API.auto_constant = true
17
- $test_method = API.new('GetCurrentDirectory', 'PP', 'L')
18
- end
19
-
20
- module Foo
21
- API.auto_namespace = 'Windows::Foo'
22
- API.auto_unicode = false
23
- API.auto_method = false
24
- API.auto_constant = false
25
- $foo_method = API.new('GetSystemDirectory', 'PL', 'L')
26
- end
27
-
28
- module Bar
29
- API.auto_namespace = 'Windows::Bar'
30
- API.auto_constant = true
31
- API.auto_method = true
32
- $bar_method = API.new('GetUserName', 'PP', 'I', 'advapi32')
33
- end
34
-
35
- module Baz
36
- API.auto_namespace = 'Windows::Baz'
37
- API.auto_constant = true
38
- API.auto_method = true
39
-
40
- # No ANSI equivalent for ReadDirectoryChangesW
41
- $strstr = API.new('strstr', 'PP', 'P', 'msvcrt')
42
- $umask = API.new('_umask', 'I', 'I', 'msvcrt')
43
- $wave = API.new('waveOutGetNumDevs', 'V', 'I', 'winmm')
44
- $read = API.new('ReadDirectoryChangesW', 'LPLILPPP', 'B')
45
- end
46
- end
47
-
48
- class TC_Windows_API < Test::Unit::TestCase
49
- include Windows::Test
50
- include Windows::Foo
51
- include Windows::Bar
52
- include Windows::Baz
53
-
54
- def setup
55
- @buf = 0.chr * 256
56
- @runtimes = ['msvcrt', 'msvcr80', 'msvcr90', 'msvcr100']
57
- end
58
-
59
- def test_version
60
- assert_equal('0.4.3', API::VERSION)
61
- end
62
-
63
- def test_full_data_types
64
- assert_nothing_raised{
65
- API.new('GetWindowsDirectory', ['LPTSTR', 'UINT'], 'BOOL')
66
- }
67
- end
68
-
69
- def test_msvcrt_constant
70
- assert_true(@runtimes.include?(Windows::MSVCRT_DLL))
71
- end
72
-
73
- # Validate that funcs like 'strstr' get an uppercase constant like 'Strstr'
74
- def test_lower_case_to_capitalized_constant
75
- assert_not_nil(Windows::Baz::Strstr)
76
- assert_not_nil(Windows::Baz::Umask)
77
- assert_not_nil(Windows::Baz::WaveOutGetNumDevs)
78
- end
79
-
80
- def test_explicit_wide_function_only
81
- assert_not_nil(Windows::Baz::ReadDirectoryChangesW)
82
- assert_false(Windows::Baz.constants.include?('ReadDirectoryChanges'))
83
- assert_false(Windows::Baz.constants.include?('ReadDirectoryChangesA'))
84
- end
85
-
86
- def test_lower_case_auto_methods
87
- assert_respond_to(self, :strstr)
88
- assert_respond_to(self, :umask)
89
- assert_respond_to(self, :_umask)
90
- assert_respond_to(self, :waveOutGetNumDevs)
91
- assert_equal('llo', strstr('hello', 'l'))
92
- end
93
-
94
- def test_auto_unicode
95
- assert_not_nil(Windows::Bar::GetUserName)
96
- assert_respond_to(self, :GetUserName)
97
- assert_not_respond_to(self, :GetUserNameA)
98
- assert_not_respond_to(self, :GetUserNameW)
99
- end
100
-
101
- def test_auto_constant
102
- assert_not_nil(Windows::Test::GetCurrentDirectory)
103
- assert_not_nil(Windows::Bar::GetUserName)
104
- assert_kind_of(Win32::API, Windows::Test::GetCurrentDirectory)
105
- assert_respond_to(Windows::Test::GetCurrentDirectory, :call)
106
- end
107
-
108
- def test_auto_method
109
- assert_respond_to(self, :GetCurrentDirectory)
110
- assert_respond_to(self, :GetCurrentDirectoryA)
111
- assert_respond_to(self, :GetCurrentDirectoryW)
112
- assert_not_respond_to(self, :GetSystemDirectory)
113
- assert_not_respond_to(self, :GetSystemDirectoryA)
114
- assert_not_respond_to(self, :GetSystemDirectoryW)
115
- end
116
-
117
- def test_call
118
- assert_respond_to($test_method, :call)
119
- assert_respond_to($foo_method, :call)
120
- assert_nothing_raised{ $test_method.call(@buf.length, @buf) }
121
- assert_nothing_raised{ $foo_method.call(@buf, @buf.length) }
122
- end
123
-
124
- def test_dll_name
125
- assert_respond_to($test_method, :dll_name)
126
- assert_equal('kernel32', $test_method.dll_name)
127
- end
128
-
129
- def test_function_name
130
- assert_respond_to($test_method, :function_name)
131
- assert_equal('GetCurrentDirectory', $test_method.function_name)
132
- end
133
-
134
- def test_prototype
135
- assert_respond_to($test_method, :prototype)
136
- assert_equal(['P', 'P'], $test_method.prototype)
137
- end
138
-
139
- def test_return_type
140
- assert_respond_to($test_method, :return_type)
141
- assert_equal('L', $test_method.return_type)
142
- end
143
-
144
- def test_effective_function_name
145
- assert_respond_to($test_method, :effective_function_name)
146
- assert_equal('GetCurrentDirectoryA', $test_method.effective_function_name)
147
- assert_equal('strstr', $strstr.effective_function_name)
148
- assert_equal('waveOutGetNumDevs', $wave.effective_function_name)
149
- assert_equal('ReadDirectoryChangesW', $read.effective_function_name)
150
- end
151
-
152
- def test_bad_prototype_raises_error
153
- assert_raise(Win32::API::PrototypeError){
154
- Windows::API.new('GetCurrentDirectory', 'XL', 'L')
155
- }
156
- assert_raise(Win32::API::PrototypeError){
157
- Windows::API.new('GetCurrentDirectory', 'PL', 'X')
158
- }
159
- end
160
-
161
- def test_bad_function_raises_error
162
- assert_raise(Win32::API::LoadLibraryError){
163
- Windows::API.new('GetCurrentFooBar', 'LL', 'L')
164
- }
165
- end
166
-
167
- def teardown
168
- @buf = nil
169
- @runtimes = nil
170
- end
171
- end
1
+ ############################################################################
2
+ # test_windows_api.rb
3
+ #
4
+ # Test case for the Windows::API class. You should run this as Rake task,
5
+ # i.e. 'rake test', instead of running it directly.
6
+ ############################################################################
7
+ require 'windows/api'
8
+ require 'test-unit'
9
+ include Windows
10
+
11
+ module Windows
12
+ module Test
13
+ API.auto_namespace = 'Windows::Test'
14
+ API.auto_unicode = true
15
+ API.auto_method = true
16
+ API.auto_constant = true
17
+ $test_method = API.new('GetCurrentDirectory', 'PP', 'L')
18
+ end
19
+
20
+ module Foo
21
+ API.auto_namespace = 'Windows::Foo'
22
+ API.auto_unicode = false
23
+ API.auto_method = false
24
+ API.auto_constant = false
25
+ $foo_method = API.new('GetSystemDirectory', 'PL', 'L')
26
+ end
27
+
28
+ module Bar
29
+ API.auto_namespace = 'Windows::Bar'
30
+ API.auto_constant = true
31
+ API.auto_method = true
32
+ $bar_method = API.new('GetUserName', 'PP', 'I', 'advapi32')
33
+ end
34
+
35
+ module Baz
36
+ API.auto_namespace = 'Windows::Baz'
37
+ API.auto_constant = true
38
+ API.auto_method = true
39
+
40
+ # No ANSI equivalent for ReadDirectoryChangesW
41
+ $strstr = API.new('strstr', 'PP', 'P', 'msvcrt')
42
+ $umask = API.new('_umask', 'I', 'I', 'msvcrt')
43
+ $wave = API.new('waveOutGetNumDevs', 'V', 'I', 'winmm')
44
+ $read = API.new('ReadDirectoryChangesW', 'LPLILPPP', 'B')
45
+ end
46
+ end
47
+
48
+ class TC_Windows_API < Test::Unit::TestCase
49
+ include Windows::Test
50
+ include Windows::Foo
51
+ include Windows::Bar
52
+ include Windows::Baz
53
+
54
+ def setup
55
+ @buf = 0.chr * 256
56
+ @runtimes = ['msvcrt', 'msvcr80', 'msvcr90', 'msvcr100']
57
+ end
58
+
59
+ def test_version
60
+ assert_equal('0.4.4', API::VERSION)
61
+ end
62
+
63
+ def test_full_data_types
64
+ assert_nothing_raised{
65
+ API.new('GetWindowsDirectory', ['LPTSTR', 'UINT'], 'BOOL')
66
+ }
67
+ end
68
+
69
+ def test_msvcrt_constant
70
+ assert_true(@runtimes.include?(Windows::MSVCRT_DLL))
71
+ end
72
+
73
+ # Validate that funcs like 'strstr' get an uppercase constant like 'Strstr'
74
+ def test_lower_case_to_capitalized_constant
75
+ assert_not_nil(Windows::Baz::Strstr)
76
+ assert_not_nil(Windows::Baz::Umask)
77
+ assert_not_nil(Windows::Baz::WaveOutGetNumDevs)
78
+ end
79
+
80
+ def test_explicit_wide_function_only
81
+ assert_not_nil(Windows::Baz::ReadDirectoryChangesW)
82
+ assert_false(Windows::Baz.constants.include?('ReadDirectoryChanges'))
83
+ assert_false(Windows::Baz.constants.include?('ReadDirectoryChangesA'))
84
+ end
85
+
86
+ def test_lower_case_auto_methods
87
+ assert_respond_to(self, :strstr)
88
+ assert_respond_to(self, :umask)
89
+ assert_respond_to(self, :_umask)
90
+ assert_respond_to(self, :waveOutGetNumDevs)
91
+ assert_equal('llo', strstr('hello', 'l'))
92
+ end
93
+
94
+ def test_auto_unicode
95
+ assert_not_nil(Windows::Bar::GetUserName)
96
+ assert_respond_to(self, :GetUserName)
97
+ assert_not_respond_to(self, :GetUserNameA)
98
+ assert_not_respond_to(self, :GetUserNameW)
99
+ end
100
+
101
+ def test_auto_constant
102
+ assert_not_nil(Windows::Test::GetCurrentDirectory)
103
+ assert_not_nil(Windows::Bar::GetUserName)
104
+ assert_kind_of(Win32::API, Windows::Test::GetCurrentDirectory)
105
+ assert_respond_to(Windows::Test::GetCurrentDirectory, :call)
106
+ end
107
+
108
+ def test_auto_method
109
+ assert_respond_to(self, :GetCurrentDirectory)
110
+ assert_respond_to(self, :GetCurrentDirectoryA)
111
+ assert_respond_to(self, :GetCurrentDirectoryW)
112
+ assert_not_respond_to(self, :GetSystemDirectory)
113
+ assert_not_respond_to(self, :GetSystemDirectoryA)
114
+ assert_not_respond_to(self, :GetSystemDirectoryW)
115
+ end
116
+
117
+ def test_call
118
+ assert_respond_to($test_method, :call)
119
+ assert_respond_to($foo_method, :call)
120
+ assert_nothing_raised{ $test_method.call(@buf.length, @buf) }
121
+ assert_nothing_raised{ $foo_method.call(@buf, @buf.length) }
122
+ end
123
+
124
+ def test_dll_name
125
+ assert_respond_to($test_method, :dll_name)
126
+ assert_equal('kernel32', $test_method.dll_name)
127
+ end
128
+
129
+ def test_function_name
130
+ assert_respond_to($test_method, :function_name)
131
+ assert_equal('GetCurrentDirectory', $test_method.function_name)
132
+ end
133
+
134
+ def test_prototype
135
+ assert_respond_to($test_method, :prototype)
136
+ assert_equal(['P', 'P'], $test_method.prototype)
137
+ end
138
+
139
+ def test_return_type
140
+ assert_respond_to($test_method, :return_type)
141
+ assert_equal('L', $test_method.return_type)
142
+ end
143
+
144
+ def test_effective_function_name
145
+ assert_respond_to($test_method, :effective_function_name)
146
+ assert_equal('GetCurrentDirectoryA', $test_method.effective_function_name)
147
+ assert_equal('strstr', $strstr.effective_function_name)
148
+ assert_equal('waveOutGetNumDevs', $wave.effective_function_name)
149
+ assert_equal('ReadDirectoryChangesW', $read.effective_function_name)
150
+ end
151
+
152
+ def test_bad_prototype_raises_error
153
+ assert_raise(Win32::API::PrototypeError){
154
+ Windows::API.new('GetCurrentDirectory', 'XL', 'L')
155
+ }
156
+ assert_raise(Win32::API::PrototypeError){
157
+ Windows::API.new('GetCurrentDirectory', 'PL', 'X')
158
+ }
159
+ end
160
+
161
+ def test_bad_function_raises_error
162
+ assert_raise(Win32::API::LoadLibraryError){
163
+ Windows::API.new('GetCurrentFooBar', 'LL', 'L')
164
+ }
165
+ end
166
+
167
+ def teardown
168
+ @buf = nil
169
+ @runtimes = nil
170
+ end
171
+ end