mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #19714: Tests for importlib.machinery.WindowsRegistryFinder.
Patch by Claudiu Popa, review by Martin v. Löwis.
This commit is contained in:
parent
f499931b33
commit
7c08b19f86
1 changed files with 63 additions and 2 deletions
|
@ -1,14 +1,62 @@
|
||||||
from . import util as test_util
|
from . import util as test_util
|
||||||
machinery = test_util.import_importlib('importlib.machinery')
|
machinery = test_util.import_importlib('importlib.machinery')
|
||||||
|
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
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)
|
||||||
|
|
||||||
|
@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')
|
@unittest.skipUnless(sys.platform.startswith('win'), 'requires Windows')
|
||||||
class WindowsRegistryFinderTests:
|
class WindowsRegistryFinderTests:
|
||||||
|
# The module name is process-specific, allowing for
|
||||||
# XXX Need a test that finds the spec via the registry.
|
# simultaneous runs of the same test on a single machine.
|
||||||
|
test_module = "spamham{}".format(os.getpid())
|
||||||
|
|
||||||
def test_find_spec_missing(self):
|
def test_find_spec_missing(self):
|
||||||
spec = self.machinery.WindowsRegistryFinder.find_spec('spam')
|
spec = self.machinery.WindowsRegistryFinder.find_spec('spam')
|
||||||
|
@ -18,6 +66,19 @@ class WindowsRegistryFinderTests:
|
||||||
loader = self.machinery.WindowsRegistryFinder.find_module('spam')
|
loader = self.machinery.WindowsRegistryFinder.find_module('spam')
|
||||||
self.assertIs(loader, None)
|
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,
|
(Frozen_WindowsRegistryFinderTests,
|
||||||
Source_WindowsRegistryFinderTests
|
Source_WindowsRegistryFinderTests
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue