diff options
Diffstat (limited to 'Lib/test/test_winreg.py')
-rw-r--r-- | Lib/test/test_winreg.py | 111 |
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() |