[Python-checkins] cpython: Issue #19714: Tests for importlib.machinery.WindowsRegistryFinder.

brett.cannon python-checkins at python.org
Fri Aug 22 16:28:54 CEST 2014


http://hg.python.org/cpython/rev/a21ddb1c41d2
changeset:   92178:a21ddb1c41d2
user:        Brett Cannon <brett at python.org>
date:        Fri Aug 22 10:28:42 2014 -0400
summary:
  Issue #19714: Tests for importlib.machinery.WindowsRegistryFinder.

Patch by Claudiu Popa, review by Martin v. Löwis.

files:
  Lib/test/test_importlib/test_windows.py |  65 ++++++++++++-
  1 files changed, 63 insertions(+), 2 deletions(-)


diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py
--- a/Lib/test/test_importlib/test_windows.py
+++ b/Lib/test/test_importlib/test_windows.py
@@ -1,14 +1,62 @@
 from . import util as test_util
 machinery = test_util.import_importlib('importlib.machinery')
 
+import os
 import sys
 import unittest
+from test import support
+from contextlib import contextmanager
+from .util import temp_module
+
+support.import_module('winreg', required_on=['win'])
+from winreg import (
+    CreateKey, HKEY_CURRENT_USER,
+    SetValue, REG_SZ, KEY_ALL_ACCESS,
+    EnumKey, CloseKey, DeleteKey, OpenKey
+)
+
+def delete_registry_tree(root, subkey):
+    try:
+        hkey = OpenKey(root, subkey, access=KEY_ALL_ACCESS)
+    except OSError:
+        # subkey does not exist
+        return
+    while True:
+        try:
+            subsubkey = EnumKey(hkey, 0)
+        except OSError:
+            # no more subkeys
+            break
+        delete_registry_tree(hkey, subsubkey)
+    CloseKey(hkey)
+    DeleteKey(root, subkey)
+
+ at contextmanager
+def setup_module(machinery, name, path=None):
+    if machinery.WindowsRegistryFinder.DEBUG_BUILD:
+        root = machinery.WindowsRegistryFinder.REGISTRY_KEY_DEBUG
+    else:
+        root = machinery.WindowsRegistryFinder.REGISTRY_KEY
+    key = root.format(fullname=name,
+                      sys_version=sys.version[:3])
+    try:
+        with temp_module(name, "a = 1") as location:
+            subkey = CreateKey(HKEY_CURRENT_USER, key)
+            if path is None:
+                path = location + ".py"
+            SetValue(subkey, "", REG_SZ, path)
+            yield
+    finally:
+        if machinery.WindowsRegistryFinder.DEBUG_BUILD:
+            key = os.path.dirname(key)
+        delete_registry_tree(HKEY_CURRENT_USER, key)
 
 
 @unittest.skipUnless(sys.platform.startswith('win'), 'requires Windows')
 class WindowsRegistryFinderTests:
-
-    # XXX Need a test that finds the spec via the registry.
+    # The module name is process-specific, allowing for
+    # simultaneous runs of the same test on a single machine.
+    test_module = "spamham{}".format(os.getpid())
 
     def test_find_spec_missing(self):
         spec = self.machinery.WindowsRegistryFinder.find_spec('spam')
@@ -18,6 +66,19 @@
         loader = self.machinery.WindowsRegistryFinder.find_module('spam')
         self.assertIs(loader, None)
 
+    def test_module_found(self):
+        with setup_module(self.machinery, self.test_module):
+            loader = self.machinery.WindowsRegistryFinder.find_module(self.test_module)
+            spec = self.machinery.WindowsRegistryFinder.find_spec(self.test_module)
+            self.assertIsNot(loader, None)
+            self.assertIsNot(spec, None)
+
+    def test_module_not_found(self):
+        with setup_module(self.machinery, self.test_module, path="."):
+            loader = self.machinery.WindowsRegistryFinder.find_module(self.test_module)
+            spec = self.machinery.WindowsRegistryFinder.find_spec(self.test_module)
+            self.assertIsNone(loader)
+            self.assertIsNone(spec)
 
 (Frozen_WindowsRegistryFinderTests,
  Source_WindowsRegistryFinderTests

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list