Skip to content

Commit

Permalink
Factor out helper code from importlib.test.extension.test_path_hook.
Browse files Browse the repository at this point in the history
  • Loading branch information
brettcannon committed Feb 7, 2009
1 parent 36d1f3e commit 534b2cd
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 42 deletions.
2 changes: 0 additions & 2 deletions Lib/importlib/NOTES
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
to do
/////

* Extract test_path_hooks constants into a util module for extension testing.

* Backport a poor-man's functools.wraps.

* Implement PEP 302 protocol for loaders (should just be a matter of testing).
Expand Down
6 changes: 3 additions & 3 deletions Lib/importlib/test/extension/test_case_sensitivity.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
import unittest
import importlib
from .. import util
from . import test_path_hook
from . import util as ext_util


@util.case_insensitive_tests
class ExtensionModuleCaseSensitivityTest(unittest.TestCase):

def find_module(self):
good_name = test_path_hook.NAME
good_name = ext_util.NAME
bad_name = good_name.upper()
assert good_name != bad_name
finder = importlib.ExtensionFileImporter(test_path_hook.PATH)
finder = importlib.ExtensionFileImporter(ext_util.PATH)
return finder.find_module(bad_name)

def test_case_sensitive(self):
Expand Down
6 changes: 3 additions & 3 deletions Lib/importlib/test/extension/test_finder.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import importlib
from .. import abc
from . import test_path_hook
from . import util

import unittest

Expand All @@ -9,11 +9,11 @@ class FinderTests(abc.FinderTests):
"""Test the finder for extension modules."""

def find_module(self, fullname):
importer = importlib.ExtensionFileImporter(test_path_hook.PATH)
importer = importlib.ExtensionFileImporter(util.PATH)
return importer.find_module(fullname)

def test_module(self):
self.assert_(self.find_module(test_path_hook.NAME))
self.assert_(self.find_module(util.NAME))

def test_package(self):
# Extension modules cannot be an __init__ for a package.
Expand Down
23 changes: 11 additions & 12 deletions Lib/importlib/test/extension/test_loader.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import importlib
from . import test_path_hook
from . import util as ext_util
from .. import abc
from .. import util

Expand All @@ -12,19 +12,18 @@ class LoaderTests(abc.LoaderTests):
"""Test load_module() for extension modules."""

def load_module(self, fullname):
loader = importlib._ExtensionFileLoader(test_path_hook.NAME,
test_path_hook.FILEPATH,
False)
loader = importlib._ExtensionFileLoader(ext_util.NAME,
ext_util.FILEPATH, False)
return loader.load_module(fullname)

def test_module(self):
with util.uncache(test_path_hook.NAME):
module = self.load_module(test_path_hook.NAME)
for attr, value in [('__name__', test_path_hook.NAME),
('__file__', test_path_hook.FILEPATH),
with util.uncache(ext_util.NAME):
module = self.load_module(ext_util.NAME)
for attr, value in [('__name__', ext_util.NAME),
('__file__', ext_util.FILEPATH),
('__package__', '')]:
self.assertEqual(getattr(module, attr), value)
self.assert_(test_path_hook.NAME in sys.modules)
self.assert_(ext_util.NAME in sys.modules)

def test_package(self):
# Extensions are not found in packages.
Expand All @@ -35,9 +34,9 @@ def test_lacking_parent(self):
pass

def test_module_reuse(self):
with util.uncache(test_path_hook.NAME):
module1 = self.load_module(test_path_hook.NAME)
module2 = self.load_module(test_path_hook.NAME)
with util.uncache(ext_util.NAME):
module1 = self.load_module(ext_util.NAME)
module2 = self.load_module(ext_util.NAME)
self.assert_(module1 is module2)

def test_state_after_failure(self):
Expand Down
23 changes: 2 additions & 21 deletions Lib/importlib/test/extension/test_path_hook.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,12 @@
import importlib
from . import util

import collections
import imp
from os import path
import sys
import unittest


PATH = None
EXT = None
FILENAME = None
NAME = '_testcapi'
_file_exts = [x[0] for x in imp.get_suffixes() if x[2] == imp.C_EXTENSION]
try:
for PATH in sys.path:
for EXT in _file_exts:
FILENAME = NAME + EXT
FILEPATH = path.join(PATH, FILENAME)
if path.exists(path.join(PATH, FILENAME)):
raise StopIteration
else:
PATH = EXT = FILENAME = FILEPATH = None
except StopIteration:
pass
del _file_exts


class PathHookTests(unittest.TestCase):

"""Test the path hook for extension modules."""
Expand All @@ -38,7 +19,7 @@ def hook(self, entry):
def test_success(self):
# Path hook should handle a directory where a known extension module
# exists.
self.assert_(hasattr(self.hook(PATH), 'find_module'))
self.assert_(hasattr(self.hook(util.PATH), 'find_module'))


def test_main():
Expand Down
3 changes: 2 additions & 1 deletion Lib/importlib/test/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
import imp
import os.path
from test.support import unlink
import unittest
import sys


def case_insensitive_tests(class_):
"""Class decorator that nullifies tests that require a case-insensitive
file system."""
if sys.platform not in ('win32', 'darwin', 'cygwin'):
return object()
return unittest.TestCase
else:
return class_

Expand Down

0 comments on commit 534b2cd

Please sign in to comment.