aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_winreg.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_winreg.py')
-rw-r--r--Lib/test/test_winreg.py111
1 files changed, 63 insertions, 48 deletions
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index 2799e194802..a164d2faf1f 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -3,14 +3,14 @@
import os, sys, errno
import unittest
-from test import test_support
-threading = test_support.import_module("threading")
+from test import support
+threading = support.import_module("threading")
from platform import machine
# Do this first so test will be skipped if module doesn't exist
-test_support.import_module('_winreg')
+support.import_module('winreg')
# Now import everything
-from _winreg import *
+from winreg import *
try:
REMOTE_NAME = sys.argv[sys.argv.index("--remote")+1]
@@ -37,21 +37,13 @@ test_data = [
("String Val", "A string value", REG_SZ),
("StringExpand", "The path is %path%", REG_EXPAND_SZ),
("Multi-string", ["Lots", "of", "string", "values"], REG_MULTI_SZ),
- ("Raw Data", ("binary"+chr(0)+"data"), REG_BINARY),
+ ("Raw Data", b"binary\x00data", REG_BINARY),
("Big String", "x"*(2**14-1), REG_SZ),
- ("Big Binary", "x"*(2**14), REG_BINARY),
+ ("Big Binary", b"x"*(2**14), REG_BINARY),
+ # Two and three kanjis, meaning: "Japan" and "Japanese")
+ ("Japanese 日本", "日本語", REG_SZ),
]
-if test_support.have_unicode:
- test_data += [
- (unicode("Unicode Val"), unicode("A Unicode value"), REG_SZ,),
- ("UnicodeExpand", unicode("The path is %path%"), REG_EXPAND_SZ),
- ("Multi-unicode", [unicode("Lots"), unicode("of"), unicode("unicode"),
- unicode("values")], REG_MULTI_SZ),
- ("Multi-mixed", [unicode("Unicode"), unicode("and"), "string",
- "values"], REG_MULTI_SZ),
- ]
-
class BaseWinregTests(unittest.TestCase):
def setUp(self):
@@ -75,12 +67,14 @@ class BaseWinregTests(unittest.TestCase):
CloseKey(hkey)
DeleteKey(root, subkey)
- def _write_test_data(self, root_key, CreateKey=CreateKey):
+ def _write_test_data(self, root_key, subkeystr="sub_key",
+ CreateKey=CreateKey):
# Set the default value for this key.
SetValue(root_key, test_key_name, REG_SZ, "Default value")
key = CreateKey(root_key, test_key_name)
+ self.assertTrue(key.handle != 0)
# Create a sub-key
- sub_key = CreateKey(key, "sub_key")
+ sub_key = CreateKey(key, subkeystr)
# Give the sub-key some named values
for value_name, value_data, value_type in test_data:
@@ -93,7 +87,7 @@ class BaseWinregTests(unittest.TestCase):
nkeys, nvalues, since_mod = QueryInfoKey(sub_key)
self.assertEqual(nkeys, 0, "Not the correct number of sub keys")
self.assertEqual(nvalues, len(test_data),
- "Not the correct number of values")
+ "Not the correct number of values")
# Close this key this way...
# (but before we do, copy the key as an integer - this allows
# us to test that the key really gets closed).
@@ -115,7 +109,7 @@ class BaseWinregTests(unittest.TestCase):
except EnvironmentError:
pass
- def _read_test_data(self, root_key, OpenKey=OpenKey):
+ def _read_test_data(self, root_key, subkeystr="sub_key", OpenKey=OpenKey):
# Check we can get default value for this key.
val = QueryValue(root_key, test_key_name)
self.assertEqual(val, "Default value",
@@ -123,7 +117,7 @@ class BaseWinregTests(unittest.TestCase):
key = OpenKey(root_key, test_key_name)
# Read the sub-keys
- with OpenKey(key, "sub_key") as sub_key:
+ with OpenKey(key, subkeystr) as sub_key:
# Check I can enumerate over the values.
index = 0
while 1:
@@ -131,8 +125,8 @@ class BaseWinregTests(unittest.TestCase):
data = EnumValue(sub_key, index)
except EnvironmentError:
break
- self.assertIn(data, test_data,
- "Didn't read back the correct test data")
+ self.assertEqual(data in test_data, True,
+ "Didn't read back the correct test data")
index = index + 1
self.assertEqual(index, len(test_data),
"Didn't read the correct number of items")
@@ -146,7 +140,7 @@ class BaseWinregTests(unittest.TestCase):
sub_key.Close()
# Enumerate our main key.
read_val = EnumKey(key, 0)
- self.assertEqual(read_val, "sub_key", "Read subkey value wrong")
+ self.assertEqual(read_val, subkeystr, "Read subkey value wrong")
try:
EnumKey(key, 1)
self.fail("Was able to get a second key when I only have one!")
@@ -155,9 +149,9 @@ class BaseWinregTests(unittest.TestCase):
key.Close()
- def _delete_test_data(self, root_key):
+ def _delete_test_data(self, root_key, subkeystr="sub_key"):
key = OpenKey(root_key, test_key_name, 0, KEY_ALL_ACCESS)
- sub_key = OpenKey(key, "sub_key", 0, KEY_ALL_ACCESS)
+ sub_key = OpenKey(key, subkeystr, 0, KEY_ALL_ACCESS)
# It is not necessary to delete the values before deleting
# the key (although subkeys must not exist). We delete them
# manually just to prove we can :-)
@@ -168,11 +162,11 @@ class BaseWinregTests(unittest.TestCase):
self.assertEqual(nkeys, 0, "subkey not empty before delete")
self.assertEqual(nvalues, 0, "subkey not empty before delete")
sub_key.Close()
- DeleteKey(key, "sub_key")
+ DeleteKey(key, subkeystr)
try:
# Shouldnt be able to delete it twice!
- DeleteKey(key, "sub_key")
+ DeleteKey(key, subkeystr)
self.fail("Deleting the key twice succeeded")
except EnvironmentError:
pass
@@ -185,28 +179,45 @@ class BaseWinregTests(unittest.TestCase):
except WindowsError: # Use this error name this time
pass
- def _test_all(self, root_key):
- self._write_test_data(root_key)
- self._read_test_data(root_key)
- self._delete_test_data(root_key)
+ def _test_all(self, root_key, subkeystr="sub_key"):
+ self._write_test_data(root_key, subkeystr)
+ self._read_test_data(root_key, subkeystr)
+ self._delete_test_data(root_key, subkeystr)
+
+ def _test_named_args(self, key, sub_key):
+ with CreateKeyEx(key=key, sub_key=sub_key, reserved=0,
+ access=KEY_ALL_ACCESS) as ckey:
+ self.assertTrue(ckey.handle != 0)
+
+ with OpenKeyEx(key=key, sub_key=sub_key, reserved=0,
+ access=KEY_ALL_ACCESS) as okey:
+ self.assertTrue(okey.handle != 0)
+
class LocalWinregTests(BaseWinregTests):
def test_registry_works(self):
self._test_all(HKEY_CURRENT_USER)
+ self._test_all(HKEY_CURRENT_USER, "日本-subkey")
def test_registry_works_extended_functions(self):
# Substitute the regular CreateKey and OpenKey calls with their
# extended counterparts.
# Note: DeleteKeyEx is not used here because it is platform dependent
cke = lambda key, sub_key: CreateKeyEx(key, sub_key, 0, KEY_ALL_ACCESS)
- self._write_test_data(HKEY_CURRENT_USER, cke)
+ self._write_test_data(HKEY_CURRENT_USER, CreateKey=cke)
oke = lambda key, sub_key: OpenKeyEx(key, sub_key, 0, KEY_READ)
- self._read_test_data(HKEY_CURRENT_USER, oke)
+ self._read_test_data(HKEY_CURRENT_USER, OpenKey=oke)
self._delete_test_data(HKEY_CURRENT_USER)
+ def test_named_arguments(self):
+ self._test_named_args(HKEY_CURRENT_USER, test_key_name)
+ # Use the regular DeleteKey to clean up
+ # DeleteKeyEx takes named args and is tested separately
+ DeleteKey(HKEY_CURRENT_USER, test_key_name)
+
def test_connect_registry_to_local_machine_works(self):
# perform minimal ConnectRegistry test which just invokes it
h = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
@@ -218,9 +229,9 @@ class LocalWinregTests(BaseWinregTests):
connect = lambda: ConnectRegistry("abcdefghijkl", HKEY_CURRENT_USER)
self.assertRaises(WindowsError, connect)
- def test_expand_environment_strings(self):
- r = ExpandEnvironmentStrings(u"%windir%\\test")
- self.assertEqual(type(r), unicode)
+ def testExpandEnvironmentStrings(self):
+ r = ExpandEnvironmentStrings("%windir%\\test")
+ self.assertEqual(type(r), str)
self.assertEqual(r, os.environ["windir"] + "\\test")
def test_context_manager(self):
@@ -261,8 +272,7 @@ class LocalWinregTests(BaseWinregTests):
finally:
done = True
thread.join()
- with OpenKey(HKEY_CURRENT_USER, test_key_name, 0, KEY_ALL_ACCESS) as key:
- DeleteKey(key, 'changing_value')
+ DeleteKey(HKEY_CURRENT_USER, test_key_name+'\\changing_value')
DeleteKey(HKEY_CURRENT_USER, test_key_name)
def test_long_key(self):
@@ -276,8 +286,7 @@ class LocalWinregTests(BaseWinregTests):
num_subkeys, num_values, t = QueryInfoKey(key)
EnumKey(key, 0)
finally:
- with OpenKey(HKEY_CURRENT_USER, test_key_name, 0, KEY_ALL_ACCESS) as key:
- DeleteKey(key, name)
+ DeleteKey(HKEY_CURRENT_USER, '\\'.join((test_key_name, name)))
DeleteKey(HKEY_CURRENT_USER, test_key_name)
def test_dynamic_key(self):
@@ -290,7 +299,7 @@ class LocalWinregTests(BaseWinregTests):
self.skipTest("access denied to registry key "
"(are you running in a non-interactive session?)")
raise
- QueryValueEx(HKEY_PERFORMANCE_DATA, None)
+ QueryValueEx(HKEY_PERFORMANCE_DATA, "")
# Reflection requires XP x64/Vista at a minimum. XP doesn't have this stuff
# or DeleteKeyEx so make sure their use raises NotImplementedError
@@ -355,14 +364,20 @@ class RemoteWinregTests(BaseWinregTests):
@unittest.skipUnless(WIN64_MACHINE, "x64 specific registry tests")
class Win64WinregTests(BaseWinregTests):
+ def test_named_arguments(self):
+ self._test_named_args(HKEY_CURRENT_USER, test_key_name)
+ # Clean up and also exercise the named arguments
+ DeleteKeyEx(key=HKEY_CURRENT_USER, sub_key=test_key_name,
+ access=KEY_ALL_ACCESS, reserved=0)
+
def test_reflection_functions(self):
# Test that we can call the query, enable, and disable functions
# on a key which isn't on the reflection list with no consequences.
with OpenKey(HKEY_LOCAL_MACHINE, "Software") as key:
# HKLM\Software is redirected but not reflected in all OSes
self.assertTrue(QueryReflectionKey(key))
- self.assertEqual(None, EnableReflectionKey(key))
- self.assertEqual(None, DisableReflectionKey(key))
+ self.assertIsNone(EnableReflectionKey(key))
+ self.assertIsNone(DisableReflectionKey(key))
self.assertTrue(QueryReflectionKey(key))
@unittest.skipUnless(HAS_REFLECTION, "OS doesn't support reflection")
@@ -441,11 +456,11 @@ class Win64WinregTests(BaseWinregTests):
def test_main():
- test_support.run_unittest(LocalWinregTests, RemoteWinregTests,
- Win64WinregTests)
+ support.run_unittest(LocalWinregTests, RemoteWinregTests,
+ Win64WinregTests)
if __name__ == "__main__":
if not REMOTE_NAME:
- print "Remote registry calls can be tested using",
- print "'test_winreg.py --remote \\\\machine_name'"
+ print("Remote registry calls can be tested using",
+ "'test_winreg.py --remote \\\\machine_name'")
test_main()