1212if defined? ( Win32 ::Registry )
1313 class TestWin32Registry < Test ::Unit ::TestCase
1414 COMPUTERNAME = 'SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ComputerName'
15-
16- private def backslachs ( path )
17- path . gsub ( "/" , "\\ " )
15+ TEST_REGISTRY_PATH = 'Volatile Environment'
16+ TEST_REGISTRY_KEY = 'ruby-win32-registry-test-<RND>'
17+
18+ # Create a new registry key per test in an atomic way, which is deleted on teardown.
19+ #
20+ # Fills the following instance variables:
21+ #
22+ # @test_registry_key - A registry path which is not yet created,
23+ # but can be created without collisions even when running
24+ # multiple test processes.
25+ # @test_registry_rnd - The part of the registry path with a random number.
26+ # @createopts - Required parameters (desired, opt) for create method in
27+ # the volatile environment of the registry.
28+ def setup
29+ @createopts = [ Win32 ::Registry ::KEY_ALL_ACCESS , Win32 ::Registry ::REG_OPTION_VOLATILE ]
30+ 100 . times do |i |
31+ k = TEST_REGISTRY_KEY . gsub ( "<RND>" , i . to_s )
32+ next unless Win32 ::Registry ::HKEY_CURRENT_USER . create (
33+ TEST_REGISTRY_PATH + "\\ " + k ,
34+ *@createopts
35+ ) . created?
36+ @test_registry_key = TEST_REGISTRY_PATH + "\\ " + k + "\\ " + "test\\ "
37+ @test_registry_rnd = k
38+ break
39+ end
40+ omit "Unused registry subkey not found in #{ TEST_REGISTRY_KEY } " unless @test_registry_key
1841 end
1942
20- TEST_REGISTRY_KEY = "SOFTWARE/ruby-win32-registry-test/"
21-
22- def setup
23- Win32 ::Registry ::HKEY_CURRENT_USER . open ( backslachs ( File . dirname ( TEST_REGISTRY_KEY ) ) ) do |reg |
24- reg . delete_key File . basename ( TEST_REGISTRY_KEY ) , true
43+ def teardown
44+ Win32 ::Registry ::HKEY_CURRENT_USER . open ( TEST_REGISTRY_PATH ) do |reg |
45+ reg . delete_key @test_registry_rnd , true
2546 end
26- rescue Win32 ::Registry ::Error
2747 end
2848
2949 def test_predefined
@@ -39,9 +59,9 @@ def test_predefined
3959 end
4060
4161 def test_open_no_block
42- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) . close
62+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) . close
4363
44- reg = Win32 ::Registry ::HKEY_CURRENT_USER . open ( backslachs ( TEST_REGISTRY_KEY ) , Win32 ::Registry ::KEY_ALL_ACCESS )
64+ reg = Win32 ::Registry ::HKEY_CURRENT_USER . open ( @test_registry_key , Win32 ::Registry ::KEY_ALL_ACCESS )
4565 assert_kind_of Win32 ::Registry , reg
4666 assert_equal true , reg . open?
4767 assert_equal false , reg . created?
@@ -53,10 +73,10 @@ def test_open_no_block
5373 end
5474
5575 def test_open_with_block
56- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) . close
76+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) . close
5777
5878 regs = [ ]
59- Win32 ::Registry ::HKEY_CURRENT_USER . open ( backslachs ( TEST_REGISTRY_KEY ) , Win32 ::Registry ::KEY_ALL_ACCESS ) do |reg |
79+ Win32 ::Registry ::HKEY_CURRENT_USER . open ( @test_registry_key , Win32 ::Registry ::KEY_ALL_ACCESS ) do |reg |
6080 regs << reg
6181 assert_equal true , reg . open?
6282 assert_equal false , reg . created?
@@ -92,17 +112,8 @@ def test_read
92112 end
93113 end
94114
95- def test_create_volatile
96- desired = Win32 ::Registry ::KEY_ALL_ACCESS
97- option = Win32 ::Registry ::REG_OPTION_VOLATILE
98- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) , desired ) do |reg |
99- reg . create ( "volkey" , desired , option ) { }
100- reg . delete_key ( "volkey" , true )
101- end
102- end
103-
104115 def test_create_no_block
105- reg = Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) )
116+ reg = Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts )
106117 assert_kind_of Win32 ::Registry , reg
107118 assert_equal true , reg . open?
108119 assert_equal true , reg . created?
@@ -116,7 +127,7 @@ def test_create_no_block
116127
117128 def test_create_with_block
118129 regs = [ ]
119- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
130+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
120131 regs << reg
121132 reg [ "test" ] = "abc"
122133 assert_equal true , reg . open?
@@ -132,8 +143,7 @@ def test_create_with_block
132143 end
133144
134145 def test_write
135- desired = Win32 ::Registry ::KEY_ALL_ACCESS
136- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) , desired ) do |reg |
146+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , *@createopts ) do |reg |
137147 reg . write_s ( "key1" , "data" )
138148 assert_equal [ Win32 ::Registry ::REG_SZ , "data" ] , reg . read ( "key1" )
139149 reg . write_i ( "key2" , 0x5fe79027 )
@@ -142,32 +152,32 @@ def test_write
142152 end
143153
144154 def test_accessors
145- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
155+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
146156 assert_kind_of Integer , reg . hkey
147157 assert_kind_of Win32 ::Registry , reg . parent
148158 assert_equal "HKEY_CURRENT_USER" , reg . parent . name
149- assert_equal "SOFTWARE \\ ruby-win32-registry- test\\ " , reg . keyname
159+ assert_equal "Volatile Environment \\ #{ @test_registry_rnd } \\ test\\ " , reg . keyname
150160 assert_equal Win32 ::Registry ::REG_CREATED_NEW_KEY , reg . disposition
151161 end
152162 end
153163
154164 def test_name
155- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
156- assert_equal "HKEY_CURRENT_USER\\ SOFTWARE \\ ruby-win32-registry- test\\ " , reg . name
165+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
166+ assert_equal "HKEY_CURRENT_USER\\ Volatile Environment \\ #{ @test_registry_rnd } \\ test\\ " , reg . name
157167 end
158168 end
159169
160170 def test_keys
161- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
162- reg . create ( "key1" )
171+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
172+ reg . create ( "key1" , * @createopts )
163173 assert_equal [ "key1" ] , reg . keys
164174 end
165175 end
166176
167177 def test_each_key
168178 keys = [ ]
169- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
170- reg . create ( "key1" )
179+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
180+ reg . create ( "key1" , * @createopts )
171181 reg . each_key { |*a | keys << a }
172182 end
173183 assert_equal [ 2 ] , keys . map ( &:size )
@@ -177,10 +187,10 @@ def test_each_key
177187
178188 def test_each_key_enum
179189 keys = nil
180- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
181- reg . create ( "key1" )
182- reg . create ( "key2" )
183- reg . create ( "key3" )
190+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
191+ reg . create ( "key1" , * @createopts )
192+ reg . create ( "key2" , * @createopts )
193+ reg . create ( "key3" , * @createopts )
184194 reg [ "value1" ] = "abcd"
185195 keys = reg . each_key . to_a
186196 end
@@ -190,17 +200,17 @@ def test_each_key_enum
190200 end
191201
192202 def test_values
193- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
194- reg . create ( "key1" )
203+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
204+ reg . create ( "key1" , * @createopts )
195205 reg [ "value1" ] = "abcd"
196206 assert_equal [ "abcd" ] , reg . values
197207 end
198208 end
199209
200210 def test_each_value
201211 vals = [ ]
202- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
203- reg . create ( "key1" )
212+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
213+ reg . create ( "key1" , * @createopts )
204214 reg [ "value1" ] = "abcd"
205215 reg . each_value { |*a | vals << a }
206216 end
@@ -209,8 +219,8 @@ def test_each_value
209219
210220 def test_each_value_enum
211221 vals = nil
212- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
213- reg . create ( "key1" )
222+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
223+ reg . create ( "key1" , * @createopts )
214224 reg [ "value1" ] = "abcd"
215225 reg [ "value2" ] = 42
216226 vals = reg . each_value . to_a
@@ -221,9 +231,9 @@ def test_each_value_enum
221231
222232 def test_utf8_encoding
223233 keys = [ ]
224- Win32 ::Registry ::HKEY_CURRENT_USER . create ( backslachs ( TEST_REGISTRY_KEY ) ) do |reg |
225- reg . create ( "abc EUR" )
226- reg . create ( "abc €" )
234+ Win32 ::Registry ::HKEY_CURRENT_USER . create ( @test_registry_key , * @createopts ) do |reg |
235+ reg . create ( "abc EUR" , * @createopts )
236+ reg . create ( "abc €" , * @createopts )
227237 reg . each_key do |subkey |
228238 keys << subkey
229239 end
0 commit comments