1# registry.test --
2#
3# This file contains a collection of tests for the registry command.
4# Sourcing this file into Tcl runs the tests and generates output for
5# errors.  No output means no errors were found.
6#
7# In order for these tests to run, the registry package must be on the
8# auto_path or the registry package must have been loaded already.
9#
10# Copyright (c) 1997 by Sun Microsystems, Inc.  All rights reserved.
11# Copyright (c) 1998-1999 by Scriptics Corporation.
12
13if {"::tcltest" ni [namespace children]} {
14    package require tcltest 2.5
15    namespace import -force ::tcltest::*
16}
17
18testConstraint reg 0
19if {[testConstraint win]} {
20    if {![catch {
21	    ::tcltest::loadTestedCommands
22	    set ::regver [package require registry 1.3.5]
23	}]} {
24	testConstraint reg 1
25    }
26}
27
28# determine the current locale
29testConstraint english [expr {
30    [llength [info commands testlocale]]
31    && [string match "English*" [testlocale all ""]]
32}]
33
34test registry-1.0 {check if we are testing the right dll} {win reg} {
35    set ::regver
36} {1.3.5}
37test registry-1.1 {argument parsing for registry command} {win reg} {
38    list [catch {registry} msg] $msg
39} {1 {wrong # args: should be "registry ?-32bit|-64bit? option ?arg ...?"}}
40test registry-1.1a {argument parsing for registry command} {win reg} {
41    list [catch {registry -32bit} msg] $msg
42} {1 {wrong # args: should be "registry ?-32bit|-64bit? option ?arg ...?"}}
43test registry-1.1b {argument parsing for registry command} {win reg} {
44    list [catch {registry -64bit} msg] $msg
45} {1 {wrong # args: should be "registry ?-32bit|-64bit? option ?arg ...?"}}
46test registry-1.2 {argument parsing for registry command} {win reg} {
47    list [catch {registry foo} msg] $msg
48} {1 {bad option "foo": must be broadcast, delete, get, keys, set, type, or values}}
49test registry-1.2a {argument parsing for registry command} {win reg} {
50    list [catch {registry -33bit foo} msg] $msg
51} {1 {bad mode "-33bit": must be -32bit or -64bit}}
52
53test registry-1.3 {argument parsing for registry command} {win reg} {
54    list [catch {registry d} msg] $msg
55} {1 {wrong # args: should be "registry delete keyName ?valueName?"}}
56test registry-1.3a {argument parsing for registry command} {win reg} {
57    list [catch {registry -32bit d} msg] $msg
58} {1 {wrong # args: should be "registry -32bit delete keyName ?valueName?"}}
59test registry-1.3b {argument parsing for registry command} {win reg} {
60    list [catch {registry -64bit d} msg] $msg
61} {1 {wrong # args: should be "registry -64bit delete keyName ?valueName?"}}
62test registry-1.4 {argument parsing for registry command} {win reg} {
63    list [catch {registry delete} msg] $msg
64} {1 {wrong # args: should be "registry delete keyName ?valueName?"}}
65test registry-1.5 {argument parsing for registry command} {win reg} {
66    list [catch {registry delete foo bar baz} msg] $msg
67} {1 {wrong # args: should be "registry delete keyName ?valueName?"}}
68
69test registry-1.6 {argument parsing for registry command} {win reg} {
70    list [catch {registry g} msg] $msg
71} {1 {wrong # args: should be "registry get keyName valueName"}}
72test registry-1.6a {argument parsing for registry command} {win reg} {
73    list [catch {registry -32bit g} msg] $msg
74} {1 {wrong # args: should be "registry -32bit get keyName valueName"}}
75test registry-1.6b {argument parsing for registry command} {win reg} {
76    list [catch {registry -64bit g} msg] $msg
77} {1 {wrong # args: should be "registry -64bit get keyName valueName"}}
78test registry-1.7 {argument parsing for registry command} {win reg} {
79    list [catch {registry get} msg] $msg
80} {1 {wrong # args: should be "registry get keyName valueName"}}
81test registry-1.8 {argument parsing for registry command} {win reg} {
82    list [catch {registry get foo} msg] $msg
83} {1 {wrong # args: should be "registry get keyName valueName"}}
84test registry-1.9 {argument parsing for registry command} {win reg} {
85    list [catch {registry get foo bar baz} msg] $msg
86} {1 {wrong # args: should be "registry get keyName valueName"}}
87
88test registry-1.10 {argument parsing for registry command} {win reg} {
89    list [catch {registry k} msg] $msg
90} {1 {wrong # args: should be "registry keys keyName ?pattern?"}}
91test registry-1.10a {argument parsing for registry command} {win reg} {
92    list [catch {registry -32bit k} msg] $msg
93} {1 {wrong # args: should be "registry -32bit keys keyName ?pattern?"}}
94test registry-1.10b {argument parsing for registry command} {win reg} {
95    list [catch {registry -64bit k} msg] $msg
96} {1 {wrong # args: should be "registry -64bit keys keyName ?pattern?"}}
97test registry-1.11 {argument parsing for registry command} {win reg} {
98    list [catch {registry keys} msg] $msg
99} {1 {wrong # args: should be "registry keys keyName ?pattern?"}}
100test registry-1.12 {argument parsing for registry command} {win reg} {
101    list [catch {registry keys foo bar baz} msg] $msg
102} {1 {wrong # args: should be "registry keys keyName ?pattern?"}}
103
104test registry-1.13 {argument parsing for registry command} {win reg} {
105    list [catch {registry s} msg] $msg
106} {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}}
107test registry-1.13a {argument parsing for registry command} {win reg} {
108    list [catch {registry -32bit s} msg] $msg
109} {1 {wrong # args: should be "registry -32bit set keyName ?valueName data ?type??"}}
110test registry-1.13b {argument parsing for registry command} {win reg} {
111    list [catch {registry -64bit s} msg] $msg
112} {1 {wrong # args: should be "registry -64bit set keyName ?valueName data ?type??"}}
113test registry-1.14 {argument parsing for registry command} {win reg} {
114    list [catch {registry set} msg] $msg
115} {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}}
116test registry-1.15 {argument parsing for registry command} {win reg} {
117    list [catch {registry set foo bar} msg] $msg
118} {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}}
119test registry-1.16 {argument parsing for registry command} {win reg} {
120    list [catch {registry set foo bar baz blat gorp} msg] $msg
121} {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}}
122
123test registry-1.17 {argument parsing for registry command} {win reg} {
124    list [catch {registry t} msg] $msg
125} {1 {wrong # args: should be "registry type keyName valueName"}}
126test registry-1.17a {argument parsing for registry command} {win reg} {
127    list [catch {registry -32bit t} msg] $msg
128} {1 {wrong # args: should be "registry -32bit type keyName valueName"}}
129test registry-1.17b {argument parsing for registry command} {win reg} {
130    list [catch {registry -64bit t} msg] $msg
131} {1 {wrong # args: should be "registry -64bit type keyName valueName"}}
132test registry-1.18 {argument parsing for registry command} {win reg} {
133    list [catch {registry type} msg] $msg
134} {1 {wrong # args: should be "registry type keyName valueName"}}
135test registry-1.19 {argument parsing for registry command} {win reg} {
136    list [catch {registry type foo} msg] $msg
137} {1 {wrong # args: should be "registry type keyName valueName"}}
138test registry-1.20 {argument parsing for registry command} {win reg} {
139    list [catch {registry type foo bar baz} msg] $msg
140} {1 {wrong # args: should be "registry type keyName valueName"}}
141
142test registry-1.21 {argument parsing for registry command} {win reg} {
143    list [catch {registry v} msg] $msg
144} {1 {wrong # args: should be "registry values keyName ?pattern?"}}
145test registry-1.21a {argument parsing for registry command} {win reg} {
146    list [catch {registry -32bit v} msg] $msg
147} {1 {wrong # args: should be "registry -32bit values keyName ?pattern?"}}
148test registry-1.21b {argument parsing for registry command} {win reg} {
149    list [catch {registry -64bit v} msg] $msg
150} {1 {wrong # args: should be "registry -64bit values keyName ?pattern?"}}
151test registry-1.22 {argument parsing for registry command} {win reg} {
152    list [catch {registry values} msg] $msg
153} {1 {wrong # args: should be "registry values keyName ?pattern?"}}
154test registry-1.23 {argument parsing for registry command} {win reg} {
155    list [catch {registry values foo bar baz} msg] $msg
156} {1 {wrong # args: should be "registry values keyName ?pattern?"}}
157
158test registry-2.1 {DeleteKey: bad key} {win reg} {
159    list [catch {registry delete foo} msg] $msg
160} {1 {bad root name "foo": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}}
161test registry-2.2 {DeleteKey: bad key} {win reg} {
162    list [catch {registry delete HKEY_CLASSES_ROOT} msg] $msg
163} {1 {bad key: cannot delete root keys}}
164test registry-2.3 {DeleteKey: bad key} {win reg} {
165    list [catch {registry delete HKEY_CLASSES_ROOT\\} msg] $msg
166} {1 {bad key: cannot delete root keys}}
167test registry-2.4 {DeleteKey: subkey at root level} {win reg} {
168    registry set HKEY_CURRENT_USER\\TclFoobar
169    registry delete HKEY_CURRENT_USER\\TclFoobar
170    registry keys HKEY_CURRENT_USER TclFoobar
171} {}
172test registry-2.5 {DeleteKey: subkey below root level} {win reg} {
173    registry set HKEY_CURRENT_USER\\TclFoobar\\test
174    registry delete HKEY_CURRENT_USER\\TclFoobar\\test
175    set result [registry keys HKEY_CURRENT_USER TclFoobar\\test]
176    registry delete HKEY_CURRENT_USER\\TclFoobar
177    set result
178} {}
179test registry-2.6 {DeleteKey: recursive delete} {win reg} {
180    registry set HKEY_CURRENT_USER\\TclFoobar\\test1
181    registry set HKEY_CURRENT_USER\\TclFoobar\\test2\\test3
182    registry delete HKEY_CURRENT_USER\\TclFoobar
183    set result [registry keys HKEY_CURRENT_USER TclFoobar]
184    set result
185} {}
186test registry-2.7 {DeleteKey: trailing backslashes} {win reg english} {
187    registry set HKEY_CURRENT_USER\\TclFoobar\\baz
188    list [catch {registry delete HKEY_CURRENT_USER\\TclFoobar\\} msg] $msg
189} {1 {unable to delete key: The configuration registry key is invalid.}}
190test registry-2.8 {DeleteKey: failure} {win reg} {
191    registry delete HKEY_CURRENT_USER\\TclFoobar
192    registry delete HKEY_CURRENT_USER\\TclFoobar
193} {}
194test registry-2.9 {DeleteKey: unicode} {win reg} {
195    registry delete HKEY_CURRENT_USER\\TclFoobar
196    registry set HKEY_CURRENT_USER\\TclFoobar\\test\u00c7bar\\a
197    registry set HKEY_CURRENT_USER\\TclFoobar\\test\u00c7bar\\b
198    registry delete HKEY_CURRENT_USER\\TclFoobar\\test\u00c7bar
199    set result [registry keys HKEY_CURRENT_USER\\TclFoobar]
200    registry delete HKEY_CURRENT_USER\\TclFoobar
201    set result
202} {}
203
204test registry-3.1 {DeleteValue} {win reg} {
205    registry delete HKEY_CURRENT_USER\\TclFoobar
206    registry set HKEY_CURRENT_USER\\TclFoobar\\baz test1 blort
207    registry set HKEY_CURRENT_USER\\TclFoobar\\baz test2 blat
208    registry delete HKEY_CURRENT_USER\\TclFoobar\\baz test1
209    set result [registry values HKEY_CURRENT_USER\\TclFoobar\\baz]
210    registry delete HKEY_CURRENT_USER\\TclFoobar
211    set result
212} test2
213test registry-3.2 {DeleteValue: bad key} {win reg english} {
214    registry delete HKEY_CURRENT_USER\\TclFoobar
215    list [catch {registry delete HKEY_CURRENT_USER\\TclFoobar test} msg] $msg
216} {1 {unable to open key: The system cannot find the file specified.}}
217test registry-3.3 {DeleteValue: bad value} {win reg english} {
218    registry delete HKEY_CURRENT_USER\\TclFoobar
219    registry set HKEY_CURRENT_USER\\TclFoobar\\baz test2 blort
220    set result [list [catch {registry delete HKEY_CURRENT_USER\\TclFoobar test1} msg] $msg]
221    registry delete HKEY_CURRENT_USER\\TclFoobar
222    set result
223} {1 {unable to delete value "test1" from key "HKEY_CURRENT_USER\TclFoobar": The system cannot find the file specified.}}
224test registry-3.4 {DeleteValue: Unicode} {win reg} {
225    registry delete HKEY_CURRENT_USER\\TclFoobar
226    registry set HKEY_CURRENT_USER\\TclFoobar\\\u00c7baz \u00c7test1 blort
227    registry set HKEY_CURRENT_USER\\TclFoobar\\\u00c7baz test2 blat
228    registry delete HKEY_CURRENT_USER\\TclFoobar\\\u00c7baz \u00c7test1
229    set result [registry values HKEY_CURRENT_USER\\TclFoobar\\\u00c7baz]
230    registry delete HKEY_CURRENT_USER\\TclFoobar
231    set result
232} test2
233
234test registry-4.1 {GetKeyNames: bad key} {win reg english} {
235    registry delete HKEY_CURRENT_USER\\TclFoobar
236    list [catch {registry keys HKEY_CURRENT_USER\\TclFoobar} msg] $msg
237} {1 {unable to open key: The system cannot find the file specified.}}
238test registry-4.2 {GetKeyNames} {win reg} {
239    registry delete HKEY_CURRENT_USER\\TclFoobar
240    registry set HKEY_CURRENT_USER\\TclFoobar\\baz
241    set result [registry keys HKEY_CURRENT_USER\\TclFoobar]
242    registry delete HKEY_CURRENT_USER\\TclFoobar
243    set result
244} {baz}
245test registry-4.3 {GetKeyNames: remote key} {win reg nonPortable english} {
246    set hostname [info hostname]
247    registry set \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar\\baz
248    set result [registry keys \\\\gaspode\\HKEY_CURRENT_USER\\TclFoobar]
249    registry delete \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar
250    set result
251} {baz}
252test registry-4.4 {GetKeyNames: empty key} {win reg} {
253    registry delete HKEY_CURRENT_USER\\TclFoobar
254    registry set HKEY_CURRENT_USER\\TclFoobar
255    set result [registry keys HKEY_CURRENT_USER\\TclFoobar]
256    registry delete HKEY_CURRENT_USER\\TclFoobar
257    set result
258} {}
259test registry-4.5 {GetKeyNames: patterns} {win reg} {
260    registry delete HKEY_CURRENT_USER\\TclFoobar
261    registry set HKEY_CURRENT_USER\\TclFoobar\\baz
262    registry set HKEY_CURRENT_USER\\TclFoobar\\blat
263    registry set HKEY_CURRENT_USER\\TclFoobar\\foo
264    set result [lsort [registry keys HKEY_CURRENT_USER\\TclFoobar b*]]
265    registry delete HKEY_CURRENT_USER\\TclFoobar
266    set result
267} {baz blat}
268test registry-4.6 {GetKeyNames: names with spaces} {win reg} {
269    registry delete HKEY_CURRENT_USER\\TclFoobar
270    registry set HKEY_CURRENT_USER\\TclFoobar\\baz\ bar
271    registry set HKEY_CURRENT_USER\\TclFoobar\\blat
272    registry set HKEY_CURRENT_USER\\TclFoobar\\foo
273    set result [lsort [registry keys HKEY_CURRENT_USER\\TclFoobar b*]]
274    registry delete HKEY_CURRENT_USER\\TclFoobar
275    set result
276} {{baz bar} blat}
277test registry-4.7 {GetKeyNames: Unicode} {win reg english} {
278    registry delete HKEY_CURRENT_USER\\TclFoobar
279    registry set HKEY_CURRENT_USER\\TclFoobar\\baz\u00c7bar
280    registry set HKEY_CURRENT_USER\\TclFoobar\\blat
281    registry set HKEY_CURRENT_USER\\TclFoobar\\foo
282    set result [lsort [registry keys HKEY_CURRENT_USER\\TclFoobar b*]]
283    registry delete HKEY_CURRENT_USER\\TclFoobar
284    set result
285} "baz\u00c7bar blat"
286test registry-4.8 {GetKeyNames: Unicode} {win reg} {
287    registry delete HKEY_CURRENT_USER\\TclFoobar
288    registry set HKEY_CURRENT_USER\\TclFoobar\\baz\u30b7bar
289    registry set HKEY_CURRENT_USER\\TclFoobar\\blat
290    registry set HKEY_CURRENT_USER\\TclFoobar\\foo
291    set result [lsort [registry keys HKEY_CURRENT_USER\\TclFoobar b*]]
292    registry delete HKEY_CURRENT_USER\\TclFoobar
293    set result
294} "baz\u30b7bar blat"
295test registry-4.9 {GetKeyNames: very long key [Bug 1682211]} {*}{
296    -constraints {win reg}
297    -setup {
298	registry set HKEY_CURRENT_USER\\TclFoobar\\a
299	registry set HKEY_CURRENT_USER\\TclFoobar\\b[string repeat x 254]
300	registry set HKEY_CURRENT_USER\\TclFoobar\\c
301    }
302    -body {
303	lsort [registry keys HKEY_CURRENT_USER\\TclFoobar]
304    }
305    -cleanup {
306	registry delete HKEY_CURRENT_USER\\TclFoobar
307    }} \
308    -result [list a b[string repeat x 254] c]
309
310test registry-5.1 {GetType} {win reg english} {
311    registry delete HKEY_CURRENT_USER\\TclFoobar
312    list [catch {registry type HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg
313} {1 {unable to open key: The system cannot find the file specified.}}
314test registry-5.2 {GetType} {win reg english} {
315    registry set HKEY_CURRENT_USER\\TclFoobar
316    list [catch {registry type HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg
317} {1 {unable to get type of value "val1" from key "HKEY_CURRENT_USER\TclFoobar": The system cannot find the file specified.}}
318test registry-5.3 {GetType} {win reg} {
319    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar none
320    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
321    registry delete HKEY_CURRENT_USER\\TclFoobar
322    set result
323} none
324test registry-5.4 {GetType} {win reg} {
325    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar
326    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
327    registry delete HKEY_CURRENT_USER\\TclFoobar
328    set result
329} sz
330test registry-5.5 {GetType} {win reg} {
331    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar sz
332    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
333    registry delete HKEY_CURRENT_USER\\TclFoobar
334    set result
335} sz
336test registry-5.6 {GetType} {win reg} {
337    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar expand_sz
338    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
339    registry delete HKEY_CURRENT_USER\\TclFoobar
340    set result
341} expand_sz
342test registry-5.7 {GetType} {win reg} {
343    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 binary
344    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
345    registry delete HKEY_CURRENT_USER\\TclFoobar
346    set result
347} binary
348test registry-5.8 {GetType} {win reg} {
349    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 dword
350    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
351    registry delete HKEY_CURRENT_USER\\TclFoobar
352    set result
353} dword
354test registry-5.9 {GetType} {win reg} {
355    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 dword_big_endian
356    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
357    registry delete HKEY_CURRENT_USER\\TclFoobar
358    set result
359} dword_big_endian
360test registry-5.10 {GetType} {win reg} {
361    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 link
362    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
363    registry delete HKEY_CURRENT_USER\\TclFoobar
364    set result
365} link
366test registry-5.11 {GetType} {win reg} {
367    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar multi_sz
368    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
369    registry delete HKEY_CURRENT_USER\\TclFoobar
370    set result
371} multi_sz
372test registry-5.12 {GetType} {win reg} {
373    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 resource_list
374    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
375    registry delete HKEY_CURRENT_USER\\TclFoobar
376    set result
377} resource_list
378test registry-5.13 {GetType: unknown types} {win reg} {
379    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 24
380    set result [registry type HKEY_CURRENT_USER\\TclFoobar val1]
381    registry delete HKEY_CURRENT_USER\\TclFoobar
382    set result
383} 24
384test registry-5.14 {GetType: Unicode} {win reg} {
385    registry set HKEY_CURRENT_USER\\TclFoobar va\u00c7l1 1 24
386    set result [registry type HKEY_CURRENT_USER\\TclFoobar va\u00c7l1]
387    registry delete HKEY_CURRENT_USER\\TclFoobar
388    set result
389} 24
390
391test registry-6.1 {GetValue} {win reg english} {
392    registry delete HKEY_CURRENT_USER\\TclFoobar
393    list [catch {registry get HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg
394} {1 {unable to open key: The system cannot find the file specified.}}
395test registry-6.2 {GetValue} {win reg english} {
396    registry set HKEY_CURRENT_USER\\TclFoobar
397    list [catch {registry get HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg
398} {1 {unable to get value "val1" from key "HKEY_CURRENT_USER\TclFoobar": The system cannot find the file specified.}}
399test registry-6.3 {GetValue} {win reg} {
400    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar none
401    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
402    registry delete HKEY_CURRENT_USER\\TclFoobar
403    set result
404} foobar
405test registry-6.4 {GetValue} {win reg} {
406    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar
407    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
408    registry delete HKEY_CURRENT_USER\\TclFoobar
409    set result
410} foobar
411test registry-6.5 {GetValue} {win reg} {
412    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar sz
413    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
414    registry delete HKEY_CURRENT_USER\\TclFoobar
415    set result
416} foobar
417test registry-6.6 {GetValue} {win reg} {
418    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar expand_sz
419    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
420    registry delete HKEY_CURRENT_USER\\TclFoobar
421    set result
422} foobar
423test registry-6.7 {GetValue} {win reg} {
424    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 binary
425    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
426    registry delete HKEY_CURRENT_USER\\TclFoobar
427    set result
428} 1
429test registry-6.8 {GetValue} {win reg} {
430    registry set HKEY_CURRENT_USER\\TclFoobar val1 0x20 dword
431    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
432    registry delete HKEY_CURRENT_USER\\TclFoobar
433    set result
434} 32
435test registry-6.9 {GetValue} {win reg} {
436    registry set HKEY_CURRENT_USER\\TclFoobar val1 0x20 dword_big_endian
437    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
438    registry delete HKEY_CURRENT_USER\\TclFoobar
439    set result
440} 32
441test registry-6.10 {GetValue} {win reg} {
442    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 link
443    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
444    registry delete HKEY_CURRENT_USER\\TclFoobar
445    set result
446} 1
447test registry-6.11 {GetValue} {win reg} {
448    registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar multi_sz
449    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
450    registry delete HKEY_CURRENT_USER\\TclFoobar
451    set result
452} foobar
453test registry-6.12 {GetValue} {win reg} {
454    registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo\ bar baz} multi_sz
455    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
456    registry delete HKEY_CURRENT_USER\\TclFoobar
457    set result
458} {{foo bar} baz}
459test registry-6.13 {GetValue} {win reg} {
460    registry set HKEY_CURRENT_USER\\TclFoobar val1 {} multi_sz
461    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
462    registry delete HKEY_CURRENT_USER\\TclFoobar
463    set result
464} {}
465test registry-6.14 {GetValue: truncation of multivalues with null elements} \
466	{win reg} {
467    registry set HKEY_CURRENT_USER\\TclFoobar val1 {a {} b} multi_sz
468    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
469    registry delete HKEY_CURRENT_USER\\TclFoobar
470    set result
471} a
472test registry-6.15 {GetValue} {win reg} {
473    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 resource_list
474    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
475    registry delete HKEY_CURRENT_USER\\TclFoobar
476    set result
477} 1
478test registry-6.16 {GetValue: unknown types} {win reg} {
479    registry set HKEY_CURRENT_USER\\TclFoobar val1 1 24
480    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
481    registry delete HKEY_CURRENT_USER\\TclFoobar
482    set result
483} 1
484test registry-6.17 {GetValue: Unicode value names} {win reg} {
485    registry set HKEY_CURRENT_USER\\TclFoobar val\u00c71 foobar multi_sz
486    set result [registry get HKEY_CURRENT_USER\\TclFoobar val\u00c71]
487    registry delete HKEY_CURRENT_USER\\TclFoobar
488    set result
489} foobar
490test registry-6.18 {GetValue: values with Unicode strings} {win reg} {
491    registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo ba\u30b7r baz} multi_sz
492    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
493    registry delete HKEY_CURRENT_USER\\TclFoobar
494    set result
495} "foo ba\u30b7r baz"
496test registry-6.19 {GetValue: values with Unicode strings} {win reg english} {
497    registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo ba\u00c7r baz} multi_sz
498    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
499    registry delete HKEY_CURRENT_USER\\TclFoobar
500    set result
501} "foo ba\u00c7r baz"
502test registry-6.20 {GetValue: values with Unicode strings with embedded nulls} {win reg} {
503    registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo ba\u0000r baz} multi_sz
504    set result [registry get HKEY_CURRENT_USER\\TclFoobar val1]
505    registry delete HKEY_CURRENT_USER\\TclFoobar
506    set result
507} "foo ba r baz"
508test registry-6.21 {GetValue: very long value names and values} {win reg} {
509    registry set HKEY_CURRENT_USER\\TclFoobar [string repeat k 16383] [string repeat x 16383] multi_sz
510    set result [registry get HKEY_CURRENT_USER\\TclFoobar [string repeat k 16383]]
511    registry delete HKEY_CURRENT_USER\\TclFoobar
512    set result
513} [string repeat x 16383]
514
515test registry-7.1 {GetValueNames: bad key} -constraints {win reg english} -setup {
516    registry delete HKEY_CURRENT_USER\\TclFoobar
517} -body {
518    registry values HKEY_CURRENT_USER\\TclFoobar
519} -returnCodes error -result {unable to open key: The system cannot find the file specified.}
520test registry-7.2 {GetValueNames} -constraints {win reg} -setup {
521    registry delete HKEY_CURRENT_USER\\TclFoobar
522    registry set HKEY_CURRENT_USER\\TclFoobar baz foobar
523} -body {
524    registry values HKEY_CURRENT_USER\\TclFoobar
525} -cleanup {
526    registry delete HKEY_CURRENT_USER\\TclFoobar
527} -result baz
528test registry-7.3 {GetValueNames} -constraints {win reg} -setup {
529    registry delete HKEY_CURRENT_USER\\TclFoobar
530    registry set HKEY_CURRENT_USER\\TclFoobar baz foobar1
531    registry set HKEY_CURRENT_USER\\TclFoobar blat foobar2
532    registry set HKEY_CURRENT_USER\\TclFoobar {} foobar3
533} -body {
534    lsort [registry values HKEY_CURRENT_USER\\TclFoobar]
535} -cleanup {
536    registry delete HKEY_CURRENT_USER\\TclFoobar
537} -result {{} baz blat}
538test registry-7.4 {GetValueNames: remote key} -constraints {win reg nonPortable english} -body {
539    set hostname [info hostname]
540    registry set \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar baz blat
541    set result [registry values \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar]
542    registry delete \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar
543    set result
544} -result baz
545test registry-7.5 {GetValueNames: empty key} -constraints {win reg} -setup {
546    registry delete HKEY_CURRENT_USER\\TclFoobar
547    registry set HKEY_CURRENT_USER\\TclFoobar
548} -body {
549    registry values HKEY_CURRENT_USER\\TclFoobar
550} -cleanup {
551    registry delete HKEY_CURRENT_USER\\TclFoobar
552} -result {}
553test registry-7.6 {GetValueNames: patterns} -constraints {win reg} -setup {
554    registry delete HKEY_CURRENT_USER\\TclFoobar
555    registry set HKEY_CURRENT_USER\\TclFoobar baz foobar1
556    registry set HKEY_CURRENT_USER\\TclFoobar blat foobar2
557    registry set HKEY_CURRENT_USER\\TclFoobar foo foobar3
558} -body {
559    lsort [registry values HKEY_CURRENT_USER\\TclFoobar b*]
560} -cleanup {
561    registry delete HKEY_CURRENT_USER\\TclFoobar
562} -result {baz blat}
563test registry-7.7 {GetValueNames: names with spaces} -constraints {win reg} -setup {
564    registry delete HKEY_CURRENT_USER\\TclFoobar
565    registry set HKEY_CURRENT_USER\\TclFoobar baz\ bar foobar1
566    registry set HKEY_CURRENT_USER\\TclFoobar blat foobar2
567    registry set HKEY_CURRENT_USER\\TclFoobar foo foobar3
568} -body {
569    lsort [registry values HKEY_CURRENT_USER\\TclFoobar b*]
570} -cleanup {
571    registry delete HKEY_CURRENT_USER\\TclFoobar
572} -result {{baz bar} blat}
573
574test registry-8.1 {OpenSubKey} -constraints {win reg nonPortable english} \
575    -body {
576        # This test will only succeed if the current user does not have
577        # registry access on the specified machine.
578        registry keys {\\mom\HKEY_LOCAL_MACHINE}
579    } -returnCodes error -result "unable to open key: Access is denied."
580test registry-8.2 {OpenSubKey} -constraints {win reg} -setup {
581    registry delete HKEY_CURRENT_USER\\TclFoobar
582    registry set HKEY_CURRENT_USER\\TclFoobar
583} -body {
584    registry keys HKEY_CURRENT_USER TclFoobar
585} -cleanup {
586    registry delete HKEY_CURRENT_USER\\TclFoobar
587} -result {TclFoobar}
588test registry-8.3 {OpenSubKey} -constraints {win reg english} -setup {
589    registry delete HKEY_CURRENT_USER\\TclFoobar
590} -body {
591    registry keys HKEY_CURRENT_USER\\TclFoobar
592} -returnCodes error \
593    -result "unable to open key: The system cannot find the file specified."
594
595test registry-9.1 {ParseKeyName: bad keys} -constraints {win reg} -body {
596    registry values \\
597} -returnCodes error -result "bad key \"\\\": must start with a valid root"
598test registry-9.2 {ParseKeyName: bad keys} -constraints {win reg} -body {
599    registry values \\foobar
600} -returnCodes error -result {bad key "\foobar": must start with a valid root}
601test registry-9.3 {ParseKeyName: bad keys} -constraints {win reg} -body {
602    registry values \\\\
603} -returnCodes error -result {bad root name "": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}
604test registry-9.4 {ParseKeyName: bad keys} -constraints {win reg} -body {
605    registry values \\\\\\
606} -returnCodes error -result {bad root name "": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}
607test registry-9.5 {ParseKeyName: bad keys} -constraints {win reg english} -body {
608    registry values \\\\\\HKEY_CLASSES_ROOT
609} -returnCodes error -result {unable to open key: The network address is invalid.}
610test registry-9.6 {ParseKeyName: bad keys} -constraints {win reg} -body {
611    registry values \\\\gaspode
612} -returnCodes error -result {bad root name "": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}
613test registry-9.7 {ParseKeyName: bad keys} -constraints {win reg} -body {
614    registry values foobar
615} -returnCodes error -result {bad root name "foobar": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}
616test registry-9.8 {ParseKeyName: null keys} -constraints {win reg} -body {
617    registry delete HKEY_CLASSES_ROOT\\
618} -returnCodes error -result {bad key: cannot delete root keys}
619test registry-9.9 {ParseKeyName: null keys} \
620    -constraints {win reg english} \
621    -body {registry keys HKEY_CLASSES_ROOT\\TclFoobar\\baz} \
622    -returnCodes error \
623    -result {unable to open key: The system cannot find the file specified.}
624
625test registry-10.1 {RecursiveDeleteKey} -constraints {win reg} -setup {
626    registry delete HKEY_CURRENT_USER\\TclFoobar
627} -body {
628    registry set HKEY_CURRENT_USER\\TclFoobar\\test1
629    registry set HKEY_CURRENT_USER\\TclFoobar\\test2\\test3
630    registry delete HKEY_CURRENT_USER\\TclFoobar
631    set result [registry keys HKEY_CURRENT_USER TclFoobar]
632    set result
633} -result {}
634test registry-10.2 {RecursiveDeleteKey} -constraints {win reg} -setup {
635    registry delete HKEY_CURRENT_USER\\TclFoobar
636    registry set HKEY_CURRENT_USER\\TclFoobar\\test1
637    registry set HKEY_CURRENT_USER\\TclFoobar\\test2\\test3
638} -body {
639    registry delete HKEY_CURRENT_USER\\TclFoobar\\test2\\test4
640} -cleanup {
641    registry delete HKEY_CURRENT_USER\\TclFoobar
642} -result {}
643
644test registry-11.1 {SetValue: recursive creation} \
645    -constraints {win reg} -setup {
646        registry delete HKEY_CURRENT_USER\\TclFoobar
647    } -body {
648        registry set HKEY_CURRENT_USER\\TclFoobar\\baz blat foobar
649        set result [registry get HKEY_CURRENT_USER\\TclFoobar\\baz blat]
650    } -result {foobar}
651test registry-11.2 {SetValue: modification} -constraints {win reg} \
652    -setup {
653        registry delete HKEY_CURRENT_USER\\TclFoobar
654    } -body {
655        registry set HKEY_CURRENT_USER\\TclFoobar\\baz blat foobar
656        registry set HKEY_CURRENT_USER\\TclFoobar\\baz blat frob
657        set result [registry get HKEY_CURRENT_USER\\TclFoobar\\baz blat]
658    } -result {frob}
659test registry-11.3 {SetValue: failure} \
660    -constraints {win reg nonPortable english} \
661    -body {
662        # This test will only succeed if the current user does not have
663        # registry access on the specified machine.
664        registry set {\\mom\HKEY_CURRENT_USER\TclFoobar} bar foobar
665    } -returnCodes error -result {unable to open key: Access is denied.}
666
667test registry-12.1 {BroadcastValue} -constraints {win reg} -body {
668    registry broadcast
669} -returnCodes error -result "wrong # args: should be \"registry broadcast keyName ?-timeout milliseconds?\""
670test registry-12.2 {BroadcastValue} -constraints {win reg} -body {
671    registry broadcast "" -time
672} -returnCodes error -result "wrong # args: should be \"registry broadcast keyName ?-timeout milliseconds?\""
673test registry-12.3 {BroadcastValue} -constraints {win reg} -body {
674    registry broadcast "" - 500
675} -returnCodes error -result "wrong # args: should be \"registry broadcast keyName ?-timeout milliseconds?\""
676test registry-12.4 {BroadcastValue} -constraints {win reg} -body {
677    registry broadcast {Environment}
678} -result {1 0}
679test registry-12.5 {BroadcastValue} -constraints {win reg} -body {
680    registry b {}
681} -result {1 0}
682
683# cleanup
684::tcltest::cleanupTests
685return
686
687# Local Variables:
688# mode: tcl
689# tcl-indent-level: 4
690# fill-column: 78
691# End:
692