--- a/RegressionTests__Win32OperatingSystemTest.st Thu Dec 13 23:04:29 2018 +0100
+++ b/RegressionTests__Win32OperatingSystemTest.st Mon Dec 10 15:24:26 2018 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) Claus Gittinger / eXept Software AG
COPYRIGHT (c) 2016 Jan Vrany
@@ -15,7 +17,7 @@
"{ NameSpace: RegressionTests }"
TestCase subclass:#Win32OperatingSystemTest
- instanceVariableNames:''
+ instanceVariableNames:'registryPath'
classVariableNames:''
poolDictionaries:''
category:'tests-Regression-RuntimeSystem'
@@ -38,13 +40,286 @@
"
! !
+!Win32OperatingSystemTest methodsFor:'file templates'!
+
+unicodeRegistryExample
+
+^ 'Windows Registry Editor Version 5.00
+
+[HKEY_CURRENT_USER\Software\SmalltalkX-tests]
+"emptyToTest"=""
+"testEmptyMultiSZ"=hex(7):00,00
+"bledesu"="''Testing Unicode chars ř ž č ルすしかき''). "
+"しかき "="Testus gradus"
+" ř ž č ル. "="Testing Unicode chars ř ž č ルすしかき"
+"zero"=hex:
+"non-zero"=hex:11,10
+"す "=hex:10
+"dword_value"=dword:000023af
+"11"="A number name"
+"き"=dword:234234af
+"qwordvalue"=hex(b):ad,61,28,a3,95,0e,74,79
+"qword_max"=hex(b):ff,ff,ff,ff,ff,ff,ff,ff
+"すし"=hex(b):ef,ad,00,00,00,00,00,00
+"Font_Leelawadee UI Bold"=hex(7):53,00,45,00,47,00,4f,00,45,00,55,00,49,00,42,\
+ 00,2e,00,54,00,54,00,46,00,2c,00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,\
+ 49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,31,00,30,00,2c,00,38,00,32,\
+ 00,00,00,53,00,45,00,47,00,4f,00,45,00,55,00,49,00,42,00,2e,00,54,00,54,00,\
+ 46,00,2c,00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,42,00,6f,\
+ 00,6c,00,64,00,00,00,4d,00,45,00,49,00,52,00,59,00,4f,00,42,00,2e,00,54,00,\
+ 54,00,43,00,2c,00,4d,00,65,00,69,00,72,00,79,00,6f,00,20,00,55,00,49,00,20,\
+ 00,42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,30,00,2c,00,39,00,36,00,00,00,\
+ 4d,00,45,00,49,00,52,00,59,00,4f,00,42,00,2e,00,54,00,54,00,43,00,2c,00,4d,\
+ 00,65,00,69,00,72,00,79,00,6f,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,\
+ 64,00,00,00,4d,00,53,00,4a,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,\
+ 00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,4a,00,68,00,\
+ 65,00,6e,00,67,00,48,00,65,00,69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,\
+ 00,64,00,2c,00,31,00,32,00,30,00,2c,00,39,00,36,00,00,00,4d,00,53,00,4a,00,\
+ 48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,\
+ 00,73,00,6f,00,66,00,74,00,20,00,4a,00,68,00,65,00,6e,00,67,00,48,00,65,00,\
+ 69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,00,53,00,59,\
+ 00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,\
+ 6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,48,00,65,00,69,00,20,00,55,\
+ 00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,38,00,2c,00,39,00,\
+ 36,00,00,00,4d,00,53,00,59,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,\
+ 00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,\
+ 48,00,65,00,69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,\
+ 00,41,00,4c,00,47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,00,2c,00,\
+ 4d,00,61,00,6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,\
+ 00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,31,00,38,00,2c,00,39,00,36,00,\
+ 00,00,4d,00,41,00,4c,00,47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,\
+ 00,2c,00,4d,00,61,00,6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,\
+ 69,00,63,00,20,00,42,00,6f,00,6c,00,64,00,00,00,59,00,55,00,47,00,4f,00,54,\
+ 00,48,00,42,00,2e,00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,\
+ 74,00,68,00,69,00,63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,\
+ 00,31,00,32,00,38,00,2c,00,39,00,36,00,00,00,59,00,55,00,47,00,4f,00,54,00,\
+ 48,00,42,00,2e,00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,74,\
+ 00,68,00,69,00,63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,\
+ 53,00,45,00,47,00,55,00,49,00,53,00,59,00,4d,00,2e,00,54,00,54,00,46,00,2c,\
+ 00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,53,00,79,00,6d,00,\
+ 62,00,6f,00,6c,00,00,00,00,00
+"ř ž č ルすしか"=hex(7):27,00,54,00,65,00,73,00,74,00,69,00,6e,00,67,00,20,00,55,\
+ 00,6e,00,69,00,63,00,6f,00,64,00,65,00,20,00,63,00,68,00,61,00,72,00,73,00,\
+ 20,00,59,01,20,00,7e,01,20,00,0d,01,20,00,eb,30,59,30,57,30,4b,30,4d,30,27,\
+ 00,29,00,00,00,53,00,45,00,47,00,4f,00,45,00,55,00,49,00,42,00,2e,00,54,00,\
+ 54,00,46,00,2c,00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,42,\
+ 00,6f,00,6c,00,64,00,2c,00,31,00,31,00,30,00,2c,00,38,00,32,00,00,00,53,00,\
+ 45,00,47,00,4f,00,45,00,55,00,49,00,42,00,2e,00,54,00,54,00,46,00,2c,00,53,\
+ 00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,\
+ 00,00,4d,00,45,00,49,00,52,00,59,00,4f,00,42,00,2e,00,54,00,54,00,43,00,2c,\
+ 00,4d,00,65,00,69,00,72,00,79,00,6f,00,20,00,55,00,49,00,20,00,42,00,6f,00,\
+ 6c,00,64,00,2c,00,31,00,32,00,30,00,2c,00,39,00,36,00,00,00,4d,00,45,00,49,\
+ 00,52,00,59,00,4f,00,42,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,65,00,69,00,\
+ 72,00,79,00,6f,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,\
+ 00,53,00,4a,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,\
+ 63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,4a,00,68,00,65,00,6e,00,67,\
+ 00,48,00,65,00,69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,\
+ 31,00,32,00,30,00,2c,00,39,00,36,00,00,00,4d,00,53,00,4a,00,48,00,42,00,44,\
+ 00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,\
+ 66,00,74,00,20,00,4a,00,68,00,65,00,6e,00,67,00,48,00,65,00,69,00,20,00,55,\
+ 00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,00,53,00,59,00,48,00,42,00,\
+ 44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,\
+ 00,66,00,74,00,20,00,59,00,61,00,48,00,65,00,69,00,20,00,55,00,49,00,20,00,\
+ 42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,38,00,2c,00,39,00,36,00,00,00,4d,\
+ 00,53,00,59,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,\
+ 63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,48,00,65,00,69,\
+ 00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,00,41,00,4c,00,\
+ 47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,61,00,6c,\
+ 00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,20,00,42,00,\
+ 6f,00,6c,00,64,00,2c,00,31,00,31,00,38,00,2c,00,39,00,36,00,00,00,4d,00,41,\
+ 00,4c,00,47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,\
+ 61,00,6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,20,\
+ 00,42,00,6f,00,6c,00,64,00,00,00,59,00,55,00,47,00,4f,00,54,00,48,00,42,00,\
+ 2e,00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,74,00,68,00,69,\
+ 00,63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,\
+ 38,00,2c,00,39,00,36,00,00,00,59,00,55,00,47,00,4f,00,54,00,48,00,42,00,2e,\
+ 00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,74,00,68,00,69,00,\
+ 63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,53,00,45,00,47,\
+ 00,55,00,49,00,53,00,59,00,4d,00,2e,00,54,00,54,00,46,00,2c,00,53,00,65,00,\
+ 67,00,6f,00,65,00,20,00,55,00,49,00,20,00,53,00,79,00,6d,00,62,00,6f,00,6c,\
+ 00,00,00,00,00
+"Ugh"=hex(2):27,00,54,00,65,00,73,00,74,00,69,00,6e,00,67,00,20,00,55,00,6e,00,\
+ 69,00,63,00,6f,00,64,00,65,00,20,00,63,00,68,00,61,00,72,00,73,00,20,00,59,\
+ 01,20,00,7e,01,20,00,0d,01,20,00,eb,30,59,30,57,30,4b,30,4d,30,27,00,29,00,\
+ 2e,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,00,00
+" č ルすしか"=hex(2):27,00,54,00,65,00,73,00,74,00,69,00,6e,00,67,00,20,00,55,00,\
+ 6e,00,69,00,63,00,6f,00,64,00,65,00,20,00,63,00,68,00,61,00,72,00,73,00,20,\
+ 00,59,01,20,00,7e,01,20,00,0d,01,20,00,eb,30,59,30,57,30,4b,30,4d,30,27,00,\
+ 29,00,2e,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,00,\
+ 00
+
+[HKEY_CURRENT_USER\Software\SmalltalkX-tests\ ルすしか]
+"bledesu"="''Testing Unicode chars ř ž č ルすしかき''). "
+"しかき "="Testus gradus"
+" ř ž č ル. "="Testing Unicode chars ř ž č ルすしかき"
+"zero"=hex:
+"non-zero"=hex:11,10
+"す "=hex:10
+"dword_value"=dword:000023af
+"き"=dword:234234af
+"qwordvalue"=hex(b):ad,61,28,a3,95,0e,74,79
+"qword_max"=hex(b):ff,ff,ff,ff,ff,ff,ff,ff
+"すし"=hex(b):ef,ad,00,00,00,00,00,00
+"Font_Leelawadee UI Bold"=hex(7):53,00,45,00,47,00,4f,00,45,00,55,00,49,00,42,\
+ 00,2e,00,54,00,54,00,46,00,2c,00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,\
+ 49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,31,00,30,00,2c,00,38,00,32,\
+ 00,00,00,53,00,45,00,47,00,4f,00,45,00,55,00,49,00,42,00,2e,00,54,00,54,00,\
+ 46,00,2c,00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,42,00,6f,\
+ 00,6c,00,64,00,00,00,4d,00,45,00,49,00,52,00,59,00,4f,00,42,00,2e,00,54,00,\
+ 54,00,43,00,2c,00,4d,00,65,00,69,00,72,00,79,00,6f,00,20,00,55,00,49,00,20,\
+ 00,42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,30,00,2c,00,39,00,36,00,00,00,\
+ 4d,00,45,00,49,00,52,00,59,00,4f,00,42,00,2e,00,54,00,54,00,43,00,2c,00,4d,\
+ 00,65,00,69,00,72,00,79,00,6f,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,\
+ 64,00,00,00,4d,00,53,00,4a,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,\
+ 00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,4a,00,68,00,\
+ 65,00,6e,00,67,00,48,00,65,00,69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,\
+ 00,64,00,2c,00,31,00,32,00,30,00,2c,00,39,00,36,00,00,00,4d,00,53,00,4a,00,\
+ 48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,\
+ 00,73,00,6f,00,66,00,74,00,20,00,4a,00,68,00,65,00,6e,00,67,00,48,00,65,00,\
+ 69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,00,53,00,59,\
+ 00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,\
+ 6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,48,00,65,00,69,00,20,00,55,\
+ 00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,38,00,2c,00,39,00,\
+ 36,00,00,00,4d,00,53,00,59,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,\
+ 00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,\
+ 48,00,65,00,69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,\
+ 00,41,00,4c,00,47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,00,2c,00,\
+ 4d,00,61,00,6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,\
+ 00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,31,00,38,00,2c,00,39,00,36,00,\
+ 00,00,4d,00,41,00,4c,00,47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,\
+ 00,2c,00,4d,00,61,00,6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,\
+ 69,00,63,00,20,00,42,00,6f,00,6c,00,64,00,00,00,59,00,55,00,47,00,4f,00,54,\
+ 00,48,00,42,00,2e,00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,\
+ 74,00,68,00,69,00,63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,\
+ 00,31,00,32,00,38,00,2c,00,39,00,36,00,00,00,59,00,55,00,47,00,4f,00,54,00,\
+ 48,00,42,00,2e,00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,74,\
+ 00,68,00,69,00,63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,\
+ 53,00,45,00,47,00,55,00,49,00,53,00,59,00,4d,00,2e,00,54,00,54,00,46,00,2c,\
+ 00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,53,00,79,00,6d,00,\
+ 62,00,6f,00,6c,00,00,00,00,00
+"ř ž č ルすしか"=hex(7):27,00,54,00,65,00,73,00,74,00,69,00,6e,00,67,00,20,00,55,\
+ 00,6e,00,69,00,63,00,6f,00,64,00,65,00,20,00,63,00,68,00,61,00,72,00,73,00,\
+ 20,00,59,01,20,00,7e,01,20,00,0d,01,20,00,eb,30,59,30,57,30,4b,30,4d,30,27,\
+ 00,29,00,00,00,53,00,45,00,47,00,4f,00,45,00,55,00,49,00,42,00,2e,00,54,00,\
+ 54,00,46,00,2c,00,53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,42,\
+ 00,6f,00,6c,00,64,00,2c,00,31,00,31,00,30,00,2c,00,38,00,32,00,00,00,53,00,\
+ 45,00,47,00,4f,00,45,00,55,00,49,00,42,00,2e,00,54,00,54,00,46,00,2c,00,53,\
+ 00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,\
+ 00,00,4d,00,45,00,49,00,52,00,59,00,4f,00,42,00,2e,00,54,00,54,00,43,00,2c,\
+ 00,4d,00,65,00,69,00,72,00,79,00,6f,00,20,00,55,00,49,00,20,00,42,00,6f,00,\
+ 6c,00,64,00,2c,00,31,00,32,00,30,00,2c,00,39,00,36,00,00,00,4d,00,45,00,49,\
+ 00,52,00,59,00,4f,00,42,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,65,00,69,00,\
+ 72,00,79,00,6f,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,\
+ 00,53,00,4a,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,\
+ 63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,4a,00,68,00,65,00,6e,00,67,\
+ 00,48,00,65,00,69,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,\
+ 31,00,32,00,30,00,2c,00,39,00,36,00,00,00,4d,00,53,00,4a,00,48,00,42,00,44,\
+ 00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,\
+ 66,00,74,00,20,00,4a,00,68,00,65,00,6e,00,67,00,48,00,65,00,69,00,20,00,55,\
+ 00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,00,53,00,59,00,48,00,42,00,\
+ 44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,\
+ 00,66,00,74,00,20,00,59,00,61,00,48,00,65,00,69,00,20,00,55,00,49,00,20,00,\
+ 42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,38,00,2c,00,39,00,36,00,00,00,4d,\
+ 00,53,00,59,00,48,00,42,00,44,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,69,00,\
+ 63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,48,00,65,00,69,\
+ 00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,4d,00,41,00,4c,00,\
+ 47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,61,00,6c,\
+ 00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,20,00,42,00,\
+ 6f,00,6c,00,64,00,2c,00,31,00,31,00,38,00,2c,00,39,00,36,00,00,00,4d,00,41,\
+ 00,4c,00,47,00,55,00,4e,00,42,00,44,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,\
+ 61,00,6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,20,\
+ 00,42,00,6f,00,6c,00,64,00,00,00,59,00,55,00,47,00,4f,00,54,00,48,00,42,00,\
+ 2e,00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,74,00,68,00,69,\
+ 00,63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,2c,00,31,00,32,00,\
+ 38,00,2c,00,39,00,36,00,00,00,59,00,55,00,47,00,4f,00,54,00,48,00,42,00,2e,\
+ 00,54,00,54,00,43,00,2c,00,59,00,75,00,20,00,47,00,6f,00,74,00,68,00,69,00,\
+ 63,00,20,00,55,00,49,00,20,00,42,00,6f,00,6c,00,64,00,00,00,53,00,45,00,47,\
+ 00,55,00,49,00,53,00,59,00,4d,00,2e,00,54,00,54,00,46,00,2c,00,53,00,65,00,\
+ 67,00,6f,00,65,00,20,00,55,00,49,00,20,00,53,00,79,00,6d,00,62,00,6f,00,6c,\
+ 00,00,00,00,00
+"Ugh"=hex(2):27,00,54,00,65,00,73,00,74,00,69,00,6e,00,67,00,20,00,55,00,6e,00,\
+ 69,00,63,00,6f,00,64,00,65,00,20,00,63,00,68,00,61,00,72,00,73,00,20,00,59,\
+ 01,20,00,7e,01,20,00,0d,01,20,00,eb,30,59,30,57,30,4b,30,4d,30,27,00,29,00,\
+ 2e,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,00,00
+" č ルすしか"=hex(2):27,00,54,00,65,00,73,00,74,00,69,00,6e,00,67,00,20,00,55,00,\
+ 6e,00,69,00,63,00,6f,00,64,00,65,00,20,00,63,00,68,00,61,00,72,00,73,00,20,\
+ 00,59,01,20,00,7e,01,20,00,0d,01,20,00,eb,30,59,30,57,30,4b,30,4d,30,27,00,\
+ 29,00,2e,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,20,00,00,\
+ 00
+
+[HKEY_CURRENT_USER\Software\SmalltalkX-tests\ ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end]
+"testing"=" ルすしか"
+"か"=dword:00000002
+"256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end"="Longer_than_256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|endsdfsdfasdfasdfasdfjlkasdjflkasjdflkjasdlfjaslkdfjlkasdjflkasdflksadlkjsadlfalsdfůlasdjflkasdjflkasjdflkůjasdflůkjasdlůfjalsůkdjflůksd"
+
+[HKEY_CURRENT_USER\Software\SmalltalkX-tests\ ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end]
+
+[HKEY_CURRENT_USER\Software\SmalltalkX-tests\ ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end\unreachable]
+
+[HKEY_CURRENT_USER\Software\SmalltalkX-tests\ ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end\reachable]
+'
+
+ "Created: / 16-11-2018 / 11:24:57 / svestkap"
+ "Modified: / 05-12-2018 / 11:33:32 / svestkap"
+! !
+
!Win32OperatingSystemTest methodsFor:'release'!
setUp
+ | registryToImport file |
+
self skipIf: OperatingSystem isMSWINDOWSlike not description: 'Windows specific tests'.
- super setUp
+ super setUp.
+
+ registryToImport := self unicodeRegistryExample.
+
+ "/ registry path which will be used
+ registryPath := registryToImport
+ copyFrom: (registryToImport indexOf: $[) + 1
+ to: (registryToImport indexOf: $]) - 1.
+
+ "/ temporary file which will be used for importing
+ file := Filename newTemporary.
+
+ "/ Registry export is in UTF-16LE with BOM
+
+ " What is BOM?
+ A byte order mark (BOM) consists of the character code U+FEFF at the beginning of a data stream, where it can be used as a signature
+ defining the byte order and encoding form, primarily of unmarked plaintext files. Under some higher level protocols, use of a BOM may
+ be mandatory (or prohibited) in the Unicode data stream defined in that protocol."
+
+ "/ needed to write to file as Windows Registry do UTF16-LE With Signature
+ " BOM for UTF-16is:
+ FE FF UTF-16, big-endian (BE)
+ FF FE UTF-16, little-endian (LE)"
+
+ "/ Writing BOM first
+ file writingFileDo: [ :stream |
+ stream nextPutUtf16: (Character codePoint:16rFFFE)
+ ].
+
+ "/ this is UTF16-LE (Little Endian) Without Signature (BOM)
+ file appendingFileDo: [ :stream | stream nextPutAllUtf16Bytes: registryToImport MSB: false].
+
+ [ "/ adding registry entry so we can test it
+ OperatingSystem getCommandOutputFrom: ('REG IMPORT ' , file asString)
+ ] ensure: [ file remove ].
"Created: / 28-12-2016 / 22:12:14 / jv"
+ "Modified (format): / 16-11-2018 / 11:30:30 / svestkap"
+!
+
+tearDown
+ self skipIf: OperatingSystem isMSWINDOWSlike not description: 'Windows specific tests'.
+ super tearDown.
+
+ "/ remove the added registry entry
+ OperatingSystem getCommandOutputFrom:('REG DELETE "', registryPath, '" /f').
+
+ "/ Check if testing registry was correctly deleted
+ self assert: ((OperatingSystem registryEntry key: registryPath) isNil).
+
+ "Created: / 16-11-2018 / 11:29:12 / svestkap"
! !
!Win32OperatingSystemTest methodsFor:'tests'!
@@ -123,6 +398,813 @@
"Modified: / 05-01-2017 / 21:45:20 / jv"
! !
+!Win32OperatingSystemTest methodsFor:'tests-unicodeRead'!
+
+testReadSubKeyAtIndex
+ "Reading subKeys at certain index
+ WARNING: subKeyAtIndex: is zero based!!!!!!"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath subKeyAtIndex: 0.
+
+ self assert: readData notEmptyOrNil.
+ self assert: (readData path copyAfterLast: $\) = ' ルすしか'
+
+ "
+ self run:#testReadSubKeyAtIndex
+ self new testReadSubKeyAtIndex
+ "
+
+ "Created: / 05-12-2018 / 12:39:45 / svestkap"
+!
+
+testReadSubKeyAtIndex_MaxPath
+ "reading subKeyAtIndex with max Path
+ Note: This test acually breaks the limit that Microsoft specified in MSDN - registry key name should be maximum 255 characters including absolute path
+ MSDN link: https://docs.microsoft.com/en-us/windows/desktop/sysinfo/registry-element-size-limits"
+
+ | readData testingRegistryPath |
+
+ "/readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ readData := testingRegistryPath subKeyAtIndex: 0.
+
+ self assert: readData path notEmptyOrNil.
+ self assert:(readData path endsWith: '|end').
+
+ "/ this is maximum path size which can be reached if the SubKey is reached via index
+ self assert: readData path size = 563. "/ there is one backslash (for path) more compared to testReadSubKeyNamesAndClassesAtIndex_MaxPath_01
+
+ "
+ self run:#testReadSubKeyAtIndex_MaxPath
+ self new testReadSubKeyAtIndex_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:39:54 / svestkap"
+!
+
+testReadSubKeyNamesAndClassesAtIndex_MaxPath
+ "reading SubKeyNamesAndClasses with max Path
+ Note: This test acually breaks the limit that Microsoft specified in MSDN - registry key name should be maximum 255 characters including absolute path
+ MSDN link: https://docs.microsoft.com/en-us/windows/desktop/sysinfo/registry-element-size-limits"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ readData := testingRegistryPath subKeyNameAndClassAtIndex: 0.
+
+ self assert: readData notEmptyOrNil.
+ self assert:(readData first endsWith: '|end').
+ self assert: readData first = '256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end'.
+
+ "/ this is maximum path size which can be reached if the SubKey is reached via index
+ self assert: (testingRegistryPath path size + readData first size) = 562.
+
+ "
+ self run:#testReadSubKeyNamesAndClassesAtIndex_MaxPath
+ self new testReadSubKeyNamesAndClassesAtIndex_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:40:08 / svestkap"
+!
+
+testReadTooLongPath
+ "Trying to read too long path - if you try to read such a long path it just returns nil"
+
+ | testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa
+ |end','\','256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ self assert: testingRegistryPath isNil
+
+ "
+ self run:#testReadTooLongPath
+ self new testReadTooLongPath
+ "
+
+ "Created: / 22-11-2018 / 11:19:51 / svestkap"
+ "Modified (format): / 05-12-2018 / 12:38:58 / svestkap"
+!
+
+testReadValueNameAtIndex
+ "Reading values (#valueNameAtIndex:) at certain index
+ WARNING: #valueNameAtIndex: is zero based!!!!!!
+ Note: This test acually breaks the limit that Microsoft specified in MSDN - registry key name should be maximum 255 characters including absolute path
+ MSDN link: https://docs.microsoft.com/en-us/windows/desktop/sysinfo/registry-element-size-limits"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: (registryPath,'\', ' ルすしか').
+
+ readData := testingRegistryPath valueNameAtIndex: 1.
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData = 'しかき '
+
+ "
+ self run:#testReadValueNameAtIndex
+ self new testReadValueNameAtIndex
+ "
+
+ "Created: / 05-12-2018 / 12:40:21 / svestkap"
+!
+
+testReadValueNamed_REG_BINARY_01
+ "Testing if REG_BINARY values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'zero'.
+
+ self assert: readData = ByteArray new.
+
+ "
+ self run:#testReadValueNamed_REG_BINARY_01
+ self new testReadValueNamed_REG_BINARY_01
+ "
+
+ "Created: / 16-11-2018 / 12:37:50 / svestkap"
+!
+
+testReadValueNamed_REG_BINARY_02
+ "Testing if REG_BINARY values are read correctly via valueNamed:"
+
+ | testingRegistryPath readData readDataHex |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'non-zero'.
+ readDataHex := readData hexPrintStringWithSeparator: $|.
+
+ self assert: readData = #[17 16]. "/ ByteArray
+ self assert: readDataHex = '11|10' "/ hex
+
+ "
+ self run:#testReadValueNamed_REG_BINARY_02
+ self new testReadValueNamed_REG_BINARY_02
+ "
+
+ "Created: / 16-11-2018 / 12:39:33 / svestkap"
+!
+
+testReadValueNamed_REG_DWORD_01
+ "Testing if REG_DWORD values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'dword_value'.
+
+ self assert: readData = 9135.
+
+ "
+ self run:#testReadValueNamed_REG_DWORD_01
+ self new testReadValueNamed_REG_DWORD_01
+ "
+
+ "Created: / 16-11-2018 / 12:24:26 / svestkap"
+!
+
+testReadValueNamed_REG_DWORD_02
+ "Testing if REG_DWORD values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'き'.
+
+ self assert: readData = 591541423.
+
+ "
+ self run:#testReadValueNamed_REG_DWORD_02
+ self new testReadValueNamed_REG_DWORD_02
+ "
+
+ "Created: / 16-11-2018 / 12:24:43 / svestkap"
+!
+
+testReadValueNamed_REG_EXPAND_SZ_01
+ "Testing if REG_EXPAND_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: ' č ルすしか'.
+
+ self assert: readData = '''Testing Unicode chars ř ž č ルすしかき''). '.
+
+ "
+ self run:#testReadValueNamed_REG_EXPAND_SZ_01
+ self new testReadValueNamed_REG_EXPAND_SZ_01
+ "
+
+ "Created: / 16-11-2018 / 12:27:58 / svestkap"
+!
+
+testReadValueNamed_REG_EXPAND_SZ_02
+ "Testing if REG_EXPAND_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'Ugh'.
+
+ self assert: readData = '''Testing Unicode chars ř ž č ルすしかき''). '.
+
+ "
+ self run:#testReadValueNamed_REG_EXPAND_SZ_02
+ self new testReadValueNamed_REG_EXPAND_SZ_02
+ "
+
+ "Created: / 16-11-2018 / 12:29:52 / svestkap"
+!
+
+testReadValueNamed_REG_MULTI_SZ_01
+ "Testing if REG_MULTI_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'Font_Leelawadee UI Bold'.
+
+ self assert: readData = #('SEGOEUIB.TTF,Segoe UI Bold,110,82' 'SEGOEUIB.TTF,Segoe UI Bold' 'MEIRYOB.TTC,Meiryo UI Bold,120,96'
+ 'MEIRYOB.TTC,Meiryo UI Bold' 'MSJHBD.TTC,Microsoft JhengHei UI Bold,120,96' 'MSJHBD.TTC,Microsoft JhengHei UI Bold'
+ 'MSYHBD.TTC,Microsoft YaHei UI Bold,128,96' 'MSYHBD.TTC,Microsoft YaHei UI Bold' 'MALGUNBD.TTF,Malgun Gothic Bold,118,96'
+ 'MALGUNBD.TTF,Malgun Gothic Bold' 'YUGOTHB.TTC,Yu Gothic UI Bold,128,96' 'YUGOTHB.TTC,Yu Gothic UI Bold' 'SEGUISYM.TTF,Segoe UI Symbol')
+
+ "
+ self run:#testReadValueNamed_REG_MULTI_SZ_01
+ self new testReadValueNamed_REG_MULTI_SZ_01
+ "
+
+ "Created: / 16-11-2018 / 12:30:24 / svestkap"
+!
+
+testReadValueNamed_REG_MULTI_SZ_02
+ "Testing if REG_MULTI_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'ř ž č ルすしか'.
+
+ self assert: readData = #('''Testing Unicode chars ř ž č ルすしかき'')'
+ 'SEGOEUIB.TTF,Segoe UI Bold,110,82' 'SEGOEUIB.TTF,Segoe UI Bold' 'MEIRYOB.TTC,Meiryo UI Bold,120,96'
+ 'MEIRYOB.TTC,Meiryo UI Bold' 'MSJHBD.TTC,Microsoft JhengHei UI Bold,120,96' 'MSJHBD.TTC,Microsoft JhengHei UI Bold'
+ 'MSYHBD.TTC,Microsoft YaHei UI Bold,128,96' 'MSYHBD.TTC,Microsoft YaHei UI Bold' 'MALGUNBD.TTF,Malgun Gothic Bold,118,96'
+ 'MALGUNBD.TTF,Malgun Gothic Bold' 'YUGOTHB.TTC,Yu Gothic UI Bold,128,96' 'YUGOTHB.TTC,Yu Gothic UI Bold' 'SEGUISYM.TTF,Segoe UI Symbol')
+
+ "
+ self run:#testReadValueNamed_REG_MULTI_SZ_02
+ self new testReadValueNamed_REG_MULTI_SZ_02
+ "
+
+ "Created: / 16-11-2018 / 12:35:57 / svestkap"
+!
+
+testReadValueNamed_REG_MULTI_SZ_03
+ "Testing if empty REG_MULTI_SZ value is read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'testEmptyMultiSZ'.
+
+ self assert: readData isEmpty
+
+ "
+ self run:#testReadValueNamed_REG_MULTI_SZ_03
+ self new testReadValueNamed_REG_MULTI_SZ_03
+ "
+
+ "Created: / 03-12-2018 / 10:59:48 / svestkap"
+!
+
+testReadValueNamed_REG_QWORD_01
+ "Testing if REG_QWORD values are read correctly via valueNamed:
+ The read value is a QWORD maximum value"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'qword_max'.
+
+ self assert: readData = 18446744073709551615.
+
+ "
+ self run:#testReadValueNamed_REG_QWORD_01
+ self new testReadValueNamed_REG_QWORD_01
+ "
+
+ "Created: / 16-11-2018 / 12:25:47 / svestkap"
+ "Modified (comment): / 05-12-2018 / 12:38:09 / svestkap"
+!
+
+testReadValueNamed_REG_QWORD_02
+ "Testing if REG_QWORD values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'qwordvalue'.
+
+ self assert: readData = 8751636011737964973.
+
+ "
+ self run:#testReadValueNamed_REG_QWORD_02
+ self new testReadValueNamed_REG_QWORD_02
+ "
+
+ "Created: / 16-11-2018 / 12:26:23 / svestkap"
+!
+
+testReadValueNamed_REG_QWORD_03
+ "Testing if REG_QWORD values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'すし'.
+
+ self assert: readData asSmallInteger = 44527.
+
+ "
+ self run:#testReadValueNamed_REG_QWORD_03
+ self new testReadValueNamed_REG_QWORD_03
+ "
+
+ "Created: / 16-11-2018 / 12:27:17 / svestkap"
+ "Modified: / 20-11-2018 / 12:25:05 / svestkap"
+!
+
+testReadValueNamed_REG_SZ_01
+ "Testing if REG_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'bledesu'.
+
+ self assert: readData = '''Testing Unicode chars ř ž č ルすしかき''). '.
+
+ "
+ self run:#testReadValueNamed_REG_SZ_01
+ self new testReadValueNamed_REG_SZ_01
+ "
+
+ "Created: / 16-11-2018 / 12:14:59 / svestkap"
+!
+
+testReadValueNamed_REG_SZ_02
+ "Testing if REG_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: ' ř ž č ル. '.
+
+ self assert: readData = 'Testing Unicode chars ř ž č ルすしかき'.
+
+ "
+ self run:#testReadValueNamed_REG_SZ_02
+ self new testReadValueNamed_REG_SZ_02
+ "
+
+ "Created: / 16-11-2018 / 12:15:17 / svestkap"
+!
+
+testReadValueNamed_REG_SZ_03
+ "Testing if REG_SZ values are read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'しかき '.
+
+ self assert: readData = 'Testus gradus'.
+
+ "
+ self run:#testReadValueNamed_REG_SZ_03
+ self new testReadValueNamed_REG_SZ_03
+ "
+
+ "Created: / 16-11-2018 / 12:21:59 / svestkap"
+!
+
+testReadValueNamed_REG_SZ_04
+ "Testing if empty REG_SZ value is read correctly via valueNamed:"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 'emptyToTest'.
+
+ self assert: readData isEmpty.
+
+ "
+ self run:#testReadValueNamed_REG_SZ_04
+ self new testReadValueNamed_REG_SZ_04
+ "
+
+ "Created: / 03-12-2018 / 10:56:11 / svestkap"
+!
+
+testReadValueNamed_nonStringValue
+ "Testing reading non-string value from Registry via valueNamed
+ User should see a warning message in Transcript"
+
+ | readData testingRegistryPath |
+
+ readData := Unicode16String new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ readData := testingRegistryPath valueNamed: 11.
+
+ self assert: readData isNil.
+
+ "
+ self run:#testReadValueNamed_nonStringValue
+ self new testReadValueNamed_nonStringValue
+ "
+
+ "Created: / 05-12-2018 / 12:40:31 / svestkap"
+! !
+
+!Win32OperatingSystemTest methodsFor:'tests-unicodeReadEnumeration'!
+
+testReadAllSubKeysDo_MaxPath
+ "reading via allSubKeysDo (using subKeyAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadSubKeyAtIndex_MaxPath_01"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedCollection new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ testingRegistryPath allSubKeysDo: [ :subEntry |
+ readData add: subEntry
+ ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 3.
+ "/ this is normally unreachable subKey (subkey actually called 'unreachable')
+ self assert: (readData at: 2) path size = 575.
+
+ readData := readData copy collect: [ :subEntry | subEntry path copyAfterLast: $\ ].
+
+ self assert: readData size = 3.
+ self assert: (readData first endsWith: '|end').
+ self assert: readData second = 'unreachable'.
+ self assert: readData third = 'reachable'
+
+ "
+ self run:#testReadAllSubKeysDo_MaxPath
+ self new testReadAllSubKeysDo_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:40:53 / svestkap"
+!
+
+testReadRemoteKeyOnHost
+ "Reading remote registry via remoteKeyOnHost:
+ Note: a key must be a predefined key for more see:
+ https://docs.microsoft.com/en-us/windows/desktop/SysInfo/predefined-keys"
+
+ | testingRegistryPath remoteRegistry readData |
+
+ "/ HKEY_CURRENT_USER is one of the predefined keys
+ testingRegistryPath := Win32OperatingSystem registryEntry key: 'HKEY_CURRENT_USER'.
+ "/ testing done on localhost
+ remoteRegistry := testingRegistryPath remoteKeyOnHost: 'localhost'.
+ readData := remoteRegistry subKeys.
+
+ readData := readData copy collect: [ :subEntry | (subEntry path copyAfterLast: $\) asLowercase ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: (readData includes: 'software').
+
+ "
+ self run:#testReadRemoteKeyOnHost
+ self new testReadRemoteKeyOnHost
+ "
+
+ "Created: / 05-12-2018 / 12:41:06 / svestkap"
+!
+
+testReadSubKeyNamesAndClassesDo_MaxPath
+ "reading SubKeyNamesAndClasses with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadSubKeyNamesAndClassesAtIndex_MaxPath_01"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedDictionary new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ testingRegistryPath subKeyNamesAndClassesDo: [ :name :className |
+ readData at: name put: className.
+ ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 2.
+ self assert: (readData at: 'reachable') isEmpty. "/ the class is empty
+
+ "
+ self run:#testReadSubKeyNamesAndClassesDo_MaxPath
+ self new testReadSubKeyNamesAndClassesDo_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:41:31 / svestkap"
+!
+
+testReadSubKeysDo_MaxPath
+ "reading via subKeysDo (using subKeyAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadSubKeyAtIndex_MaxPath_01"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedCollection new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ testingRegistryPath subKeysDo: [ :subEntry |
+ readData add: subEntry
+ ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 2.
+ self assert: (readData first) path size = 563.
+
+ readData := readData copy collect: [ :subEntry | subEntry path copyAfterLast: $\ ].
+
+ self assert: readData size = 2.
+ self assert: (readData first endsWith: '|end').
+ self assert: readData second = 'reachable'.
+
+ "
+ self run:#testReadSubKeysDo_MaxPath
+ self new testReadSubKeysDo_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:41:49 / svestkap"
+!
+
+testReadSubKeys_MaxPath
+ "reading via subKeys (using subKeyAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadSubKeyAtIndex_MaxPath_01"
+
+ | readData testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ readData := testingRegistryPath subKeys.
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 2.
+ self assert: (readData first) path size = 563.
+
+ readData := readData copy collect: [ :subEntry | subEntry path copyAfterLast: $\ ].
+
+ self assert: readData size = 2.
+ self assert: (readData first endsWith: '|end').
+ self assert: readData second = 'reachable'.
+
+ "
+ self run:#testReadSubKeys_MaxPath
+ self new testReadSubKeys_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:41:59 / svestkap"
+!
+
+testReadValueNamesAndValuesDo_MaxPath
+ "reading via #valueNamesAndValuesDo: (using #valueNameAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadValueNameAtIndex_01"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedDictionary new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ testingRegistryPath valueNamesAndValuesDo: [ :name :value |
+ readData at: name put: value
+ ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 3.
+ self assert: readData first = ('testing'->' ルすしか').
+ self assert: (readData at: 'か')= 2.
+ self assert: readData second = 2.
+ self assert: (readData at: '256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end')
+ = 'Longer_than_256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|endsdfsdfasdfasdfasdfjlkasdjflkasjdflkjasdlfjaslkdfjlkasdjflkasdflksadlkjsadlfalsdfůlasdjflkasdjflkasjdflkůjasdflůkjasdlůfjalsůkdjflůksd'.
+ self assert: readData third = 'Longer_than_256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|endsdfsdfasdfasdfasdfjlkasdjflkasjdflkjasdlfjaslkdfjlkasdjflkasdflksadlkjsadlfalsdfůlasdjflkasdjflkasjdflkůjasdflůkjasdlůfjalsůkdjflůksd'.
+
+ "
+ self run:#testReadValueNamesAndValuesDo_MaxPath
+ self new testReadValueNamesAndValuesDo_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:43:05 / svestkap"
+!
+
+testReadValueNamesAndValuesDo_REG_SZ_01
+ "Testing if REG_SZ values are read correctly via valueNamesAndValuesDo:"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedDictionary new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ testingRegistryPath valueNamesAndValuesDo: [ :name :data |
+ readData at: name put: data
+ ].
+
+ self assert: (readData at: 'bledesu') = '''Testing Unicode chars ř ž č ルすしかき''). '.
+
+ "
+ self run:#testReadValueNamesAndValuesDo_REG_SZ_01
+ self new testReadValueNamesAndValuesDo_REG_SZ_01
+ "
+
+ "Created: / 16-11-2018 / 12:15:52 / svestkap"
+!
+
+testReadValueNamesAndValuesDo_REG_SZ_02
+ "Testing if REG_SZ values are read correctly via valueNamesAndValuesDo:"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedDictionary new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ testingRegistryPath valueNamesAndValuesDo: [ :name :data |
+ readData at: name put: data
+ ].
+
+ self assert: (readData at: ' ř ž č ル. ') = 'Testing Unicode chars ř ž č ルすしかき'.
+
+ "
+ self run:#testReadValueNamesAndValuesDo_REG_SZ_02
+ self new testReadValueNamesAndValuesDo_REG_SZ_02
+ "
+
+ "Created: / 05-12-2018 / 12:43:35 / svestkap"
+!
+
+testReadValueNamesDo_MaxPath
+ "reading via #valueNamesDo: (using #valueNameAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadValueNameAtIndex_01"
+
+ | readData readDataValue testingRegistryPath |
+
+ readData := OrderedCollection new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ testingRegistryPath valueNamesDo: [ :subEntry |
+ readData add: subEntry
+ ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 3.
+ self assert: readData first = 'testing'.
+ self assert: readData second = 'か'.
+ self assert: readData third = '256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end'.
+
+ readDataValue := testingRegistryPath valueNamed: readData third.
+
+ "/ MSDN limits: Value name 16,383 characters (@Windows 2000: 260 ANSI characters or 16,383 Unicode characters)
+ "/ the following tests 401 characters
+ self assert: readDataValue = 'Longer_than_256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|endsdfsdfasdfasdfasdfjlkasdjflkasjdflkjasdlfjaslkdfjlkasdjflkasdflksadlkjsadlfalsdfůlasdjflkasdjflkasjdflkůjasdflůkjasdlůfjalsůkdjflůksd'.
+ "
+ self run:#testReadValueNamesDo_MaxPath
+ self new testReadValueNamesDo_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:43:49 / svestkap"
+!
+
+testReadValueNames_MaxPath
+ "reading via #valueNames (using #valueNameAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadValueNameAtIndex_01"
+
+ | readData testingRegistryPath |
+
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ readData := testingRegistryPath valueNames.
+
+ self assert: readData isArray.
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 3.
+ self assert: readData first = 'testing'.
+ self assert: readData second = 'か'.
+ self assert: readData third = '256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end'.
+
+ "
+ self run:#testReadValueNames_MaxPath
+ self new testReadValueNames_MaxPath
+ "
+
+ "Created: / 05-12-2018 / 12:44:16 / svestkap"
+!
+
+testReadvalueNamesAndValuesDo_MaxPath_01
+ "reading via #valueNamesAndValuesDo: (using #valueNameAtIndex:) with max Path
+ The path is suppassing the Microsoft limit - for more information see testReadValueNameAtIndex_01"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedDictionary new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key:
+ (registryPath,'\', ' ルすしか\256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end').
+
+ testingRegistryPath valueNamesAndValuesDo: [ :name :value |
+ readData at: name put: value
+ ].
+
+ self assert: readData notEmptyOrNil.
+ self assert: readData size = 3.
+ self assert: readData first = ('testing'->' ルすしか').
+ self assert: (readData at: 'か')= 2.
+ self assert: readData second = 2.
+ self assert: (readData at: '256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|end')
+ = 'Longer_than_256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|endsdfsdfasdfasdfasdfjlkasdjflkasjdflkjasdlfjaslkdfjlkasdjflkasdflksadlkjsadlfalsdfůlasdjflkasdjflkasjdflkůjasdflůkjasdlůfjalsůkdjflůksd'.
+ self assert: readData third = 'Longer_than_256_chars_max_long|arsdfasdfjljljasdf;jl;jljsfasdfasdfljaslkdfjkasdfljalsd;jfa;lsdjflkasjdflkajsdflkjasdflkjsadlfjasldfjlsadjflksdjflksadjflkajsdflkjasdlfjalskdjflkasdjflkasdfkj;sdaf;kljkkjkklkjjjjkas|1asdfjsldfjlasdlfjlasdjfljasdlfjalsdjflajdfsdsasdfa|endsdfsdfasdfasdfasdfjlkasdjflkasjdflkjasdlfjaslkdfjlkasdjflkasdflksadlkjsadlfalsdfůlasdjflkasdjflkasjdflkůjasdflůkjasdlůfjalsůkdjflůksd'.
+
+ "
+ self run:#testReadvalueNamesAndValuesDo_MaxPath_01
+ self new testReadvalueNamesAndValuesDo_MaxPath_01
+ "
+
+ "Created: / 22-11-2018 / 14:10:34 / svestkap"
+!
+
+testReadvalueNamesAndValuesDo_REG_SZ_02
+ "Testing if REG_SZ values are read correctly via valueNamesAndValuesDo:"
+
+ | readData testingRegistryPath |
+
+ readData := OrderedDictionary new.
+ testingRegistryPath := Win32OperatingSystem registryEntry key: registryPath.
+
+ testingRegistryPath valueNamesAndValuesDo: [ :name :data |
+ readData at: name put: data
+ ].
+
+ self assert: (readData at: ' ř ž č ル. ') = 'Testing Unicode chars ř ž č ルすしかき'.
+
+ "
+ self run:#testReadvalueNamesAndValuesDo_REG_SZ_02
+ self new testReadvalueNamesAndValuesDo_REG_SZ_02
+ "
+
+ "Created: / 16-11-2018 / 12:16:16 / svestkap"
+! !
+
!Win32OperatingSystemTest class methodsFor:'documentation'!
version