Index: third_party/twisted_8_1/twisted/test/test_modules.py |
diff --git a/third_party/twisted_8_1/twisted/test/test_modules.py b/third_party/twisted_8_1/twisted/test/test_modules.py |
deleted file mode 100644 |
index 9b764f57e6418e70dfd612b9c806a4f04d7ea60c..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/test/test_modules.py |
+++ /dev/null |
@@ -1,371 +0,0 @@ |
-# Copyright (c) 2006-2007 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
-""" |
-Tests for twisted.python.modules, abstract access to imported or importable |
-objects. |
-""" |
- |
-import os |
-import sys |
-import itertools |
-import zipfile |
-import compileall |
- |
-from twisted.trial.unittest import TestCase |
- |
-from twisted.python import modules |
-from twisted.python.filepath import FilePath |
-from twisted.python.reflect import namedAny |
- |
-from twisted.test.test_paths import zipit |
- |
- |
- |
-class PySpaceTestCase(TestCase): |
- |
- def findByIteration(self, modname, where=modules, importPackages=False): |
- """ |
- You don't ever actually want to do this, so it's not in the public API, but |
- sometimes we want to compare the result of an iterative call with a |
- lookup call and make sure they're the same for test purposes. |
- """ |
- for modinfo in where.walkModules(importPackages=importPackages): |
- if modinfo.name == modname: |
- return modinfo |
- self.fail("Unable to find module %r through iteration." % (modname,)) |
- |
- |
- |
-class BasicTests(PySpaceTestCase): |
- def test_nonexistentPaths(self): |
- """ |
- Verify that L{modules.walkModules} ignores entries in sys.path which |
- do not exist in the filesystem. |
- """ |
- existentPath = FilePath(self.mktemp()) |
- os.makedirs(existentPath.child("test_package").path) |
- existentPath.child("test_package").child("__init__.py").setContent("") |
- |
- nonexistentPath = FilePath(self.mktemp()) |
- self.failIf(nonexistentPath.exists()) |
- |
- originalSearchPaths = sys.path[:] |
- sys.path[:] = [existentPath.path] |
- try: |
- expected = [modules.getModule("test_package")] |
- |
- beforeModules = list(modules.walkModules()) |
- sys.path.append(nonexistentPath.path) |
- afterModules = list(modules.walkModules()) |
- finally: |
- sys.path[:] = originalSearchPaths |
- |
- self.assertEqual(beforeModules, expected) |
- self.assertEqual(afterModules, expected) |
- |
- |
- def test_nonDirectoryPaths(self): |
- """ |
- Verify that L{modules.walkModules} ignores entries in sys.path which |
- refer to regular files in the filesystem. |
- """ |
- existentPath = FilePath(self.mktemp()) |
- os.makedirs(existentPath.child("test_package").path) |
- existentPath.child("test_package").child("__init__.py").setContent("") |
- |
- nonDirectoryPath = FilePath(self.mktemp()) |
- self.failIf(nonDirectoryPath.exists()) |
- nonDirectoryPath.setContent("zip file or whatever\n") |
- |
- originalSearchPaths = sys.path[:] |
- sys.path[:] = [existentPath.path] |
- try: |
- beforeModules = list(modules.walkModules()) |
- sys.path.append(nonDirectoryPath.path) |
- afterModules = list(modules.walkModules()) |
- finally: |
- sys.path[:] = originalSearchPaths |
- |
- self.assertEqual(beforeModules, afterModules) |
- |
- |
- def test_twistedShowsUp(self): |
- """ |
- Scrounge around in the top-level module namespace and make sure that |
- Twisted shows up, and that the module thusly obtained is the same as |
- the module that we find when we look for it explicitly by name. |
- """ |
- self.assertEquals(modules.getModule('twisted'), |
- self.findByIteration("twisted")) |
- |
- |
- def test_dottedNames(self): |
- """ |
- Verify that the walkModules APIs will give us back subpackages, not just |
- subpackages. |
- """ |
- self.assertEquals( |
- modules.getModule('twisted.python'), |
- self.findByIteration("twisted.python", |
- where=modules.getModule('twisted'))) |
- |
- |
- def test_onlyTopModules(self): |
- """ |
- Verify that the iterModules API will only return top-level modules and |
- packages, not submodules or subpackages. |
- """ |
- for module in modules.iterModules(): |
- self.failIf( |
- '.' in module.name, |
- "no nested modules should be returned from iterModules: %r" |
- % (module.filePath)) |
- |
- |
- def test_loadPackagesAndModules(self): |
- """ |
- Verify that we can locate and load packages, modules, submodules, and |
- subpackages. |
- """ |
- for n in ['os', |
- 'twisted', |
- 'twisted.python', |
- 'twisted.python.reflect']: |
- m = namedAny(n) |
- self.failUnlessIdentical( |
- modules.getModule(n).load(), |
- m) |
- self.failUnlessIdentical( |
- self.findByIteration(n).load(), |
- m) |
- |
- |
- def test_pathEntriesOnPath(self): |
- """ |
- Verify that path entries discovered via module loading are, in fact, on |
- sys.path somewhere. |
- """ |
- for n in ['os', |
- 'twisted', |
- 'twisted.python', |
- 'twisted.python.reflect']: |
- self.failUnlessIn( |
- modules.getModule(n).pathEntry.filePath.path, |
- sys.path) |
- |
- |
- def test_alwaysPreferPy(self): |
- """ |
- Verify that .py files will always be preferred to .pyc files, regardless of |
- directory listing order. |
- """ |
- mypath = FilePath(self.mktemp()) |
- mypath.createDirectory() |
- pp = modules.PythonPath(sysPath=[mypath.path]) |
- originalSmartPath = pp._smartPath |
- def _evilSmartPath(pathName): |
- o = originalSmartPath(pathName) |
- originalChildren = o.children |
- def evilChildren(): |
- # normally this order is random; let's make sure it always |
- # comes up .pyc-first. |
- x = originalChildren() |
- x.sort() |
- x.reverse() |
- return x |
- o.children = evilChildren |
- return o |
- mypath.child("abcd.py").setContent('\n') |
- compileall.compile_dir(mypath.path, quiet=True) |
- # sanity check |
- self.assertEquals(len(mypath.children()), 2) |
- pp._smartPath = _evilSmartPath |
- self.assertEquals(pp['abcd'].filePath, |
- mypath.child('abcd.py')) |
- |
- |
- def test_packageMissingPath(self): |
- """ |
- A package can delete its __path__ for some reasons, |
- C{modules.PythonPath} should be able to deal with it. |
- """ |
- mypath = FilePath(self.mktemp()) |
- mypath.createDirectory() |
- pp = modules.PythonPath(sysPath=[mypath.path]) |
- subpath = mypath.child("abcd") |
- subpath.createDirectory() |
- subpath.child("__init__.py").setContent('del __path__\n') |
- sys.path.append(mypath.path) |
- import abcd |
- try: |
- l = list(pp.walkModules()) |
- self.assertEquals(len(l), 1) |
- self.assertEquals(l[0].name, 'abcd') |
- finally: |
- del abcd |
- del sys.modules['abcd'] |
- sys.path.remove(mypath.path) |
- |
- |
- |
-class PathModificationTest(PySpaceTestCase): |
- """ |
- These tests share setup/cleanup behavior of creating a dummy package and |
- stuffing some code in it. |
- """ |
- |
- _serialnum = itertools.count().next # used to generate serial numbers for |
- # package names. |
- |
- def setUp(self): |
- self.pathExtensionName = self.mktemp() |
- self.pathExtension = FilePath(self.pathExtensionName) |
- self.pathExtension.createDirectory() |
- self.packageName = "pyspacetests%d" % (self._serialnum(),) |
- self.packagePath = self.pathExtension.child(self.packageName) |
- self.packagePath.createDirectory() |
- self.packagePath.child("__init__.py").setContent("") |
- self.packagePath.child("a.py").setContent("") |
- self.packagePath.child("b.py").setContent("") |
- self.packagePath.child("c__init__.py").setContent("") |
- self.pathSetUp = False |
- |
- |
- def _setupSysPath(self): |
- assert not self.pathSetUp |
- self.pathSetUp = True |
- sys.path.append(self.pathExtensionName) |
- |
- |
- def _underUnderPathTest(self, doImport=True): |
- moddir2 = self.mktemp() |
- fpmd = FilePath(moddir2) |
- fpmd.createDirectory() |
- fpmd.child("foozle.py").setContent("x = 123\n") |
- self.packagePath.child("__init__.py").setContent( |
- "__path__.append(%r)\n" % (moddir2,)) |
- # Cut here |
- self._setupSysPath() |
- modinfo = modules.getModule(self.packageName) |
- self.assertEquals( |
- self.findByIteration(self.packageName+".foozle", modinfo, |
- importPackages=doImport), |
- modinfo['foozle']) |
- self.assertEquals(modinfo['foozle'].load().x, 123) |
- |
- |
- def test_underUnderPathAlreadyImported(self): |
- """ |
- Verify that iterModules will honor the __path__ of already-loaded packages. |
- """ |
- self._underUnderPathTest() |
- |
- |
- def test_underUnderPathNotAlreadyImported(self): |
- """ |
- Verify that iterModules will honor the __path__ of already-loaded packages. |
- """ |
- self._underUnderPathTest(False) |
- |
- |
- test_underUnderPathNotAlreadyImported.todo = ( |
- "This may be impossible but it sure would be nice.") |
- |
- |
- def _listModules(self): |
- pkginfo = modules.getModule(self.packageName) |
- nfni = [modinfo.name.split(".")[-1] for modinfo in |
- pkginfo.iterModules()] |
- nfni.sort() |
- self.failUnlessEqual(nfni, ['a', 'b', 'c__init__']) |
- |
- |
- def test_listingModules(self): |
- """ |
- Make sure the module list comes back as we expect from iterModules on a |
- package, whether zipped or not. |
- """ |
- self._setupSysPath() |
- self._listModules() |
- |
- |
- def test_listingModulesAlreadyImported(self): |
- """ |
- Make sure the module list comes back as we expect from iterModules on a |
- package, whether zipped or not, even if the package has already been |
- imported. |
- """ |
- self._setupSysPath() |
- namedAny(self.packageName) |
- self._listModules() |
- |
- |
- def tearDown(self): |
- # Intentionally using 'assert' here, this is not a test assertion, this |
- # is just an "oh fuck what is going ON" assertion. -glyph |
- if self.pathSetUp: |
- HORK = "path cleanup failed: don't be surprised if other tests break" |
- assert sys.path.pop() is self.pathExtensionName, HORK+", 1" |
- assert self.pathExtensionName not in sys.path, HORK+", 2" |
- |
- |
- |
-class RebindingTest(PathModificationTest): |
- """ |
- These tests verify that the default path interrogation API works properly |
- even when sys.path has been rebound to a different object. |
- """ |
- def _setupSysPath(self): |
- assert not self.pathSetUp |
- self.pathSetUp = True |
- self.savedSysPath = sys.path |
- sys.path = sys.path[:] |
- sys.path.append(self.pathExtensionName) |
- |
- |
- def tearDown(self): |
- """ |
- Clean up sys.path by re-binding our original object. |
- """ |
- if self.pathSetUp: |
- sys.path = self.savedSysPath |
- |
- |
- |
-class ZipPathModificationTest(PathModificationTest): |
- def _setupSysPath(self): |
- assert not self.pathSetUp |
- zipit(self.pathExtensionName, self.pathExtensionName+'.zip') |
- self.pathExtensionName += '.zip' |
- assert zipfile.is_zipfile(self.pathExtensionName) |
- PathModificationTest._setupSysPath(self) |
- |
- |
-class PythonPathTestCase(TestCase): |
- """ |
- Tests for the class which provides the implementation for all of the |
- public API of L{twisted.python.modules}. |
- """ |
- def test_unhandledImporter(self): |
- """ |
- Make sure that the behavior when encountering an unknown importer |
- type is not catastrophic failure. |
- """ |
- class SecretImporter(object): |
- pass |
- |
- def hook(name): |
- return SecretImporter() |
- |
- syspath = ['example/path'] |
- sysmodules = {} |
- syshooks = [hook] |
- syscache = {} |
- def sysloader(name): |
- return None |
- space = modules.PythonPath( |
- syspath, sysmodules, syshooks, syscache, sysloader) |
- entries = list(space.iterEntries()) |
- self.assertEquals(len(entries), 1) |
- self.assertRaises(KeyError, lambda: entries[0]['module']) |