| Index: tools/telemetry/third_party/modulegraph/modulegraph_tests/test_modulegraph.py
|
| diff --git a/tools/telemetry/third_party/modulegraph/modulegraph_tests/test_modulegraph.py b/tools/telemetry/third_party/modulegraph/modulegraph_tests/test_modulegraph.py
|
| deleted file mode 100644
|
| index 0ee724bd63494c7f0b1cffbcffb77be7be0cf5a8..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/third_party/modulegraph/modulegraph_tests/test_modulegraph.py
|
| +++ /dev/null
|
| @@ -1,1060 +0,0 @@
|
| -import unittest
|
| -from modulegraph import modulegraph
|
| -import pkg_resources
|
| -import os
|
| -import imp
|
| -import sys
|
| -import shutil
|
| -import warnings
|
| -from altgraph import Graph
|
| -import textwrap
|
| -import xml.etree.ElementTree as ET
|
| -import pickle
|
| -
|
| -try:
|
| - bytes
|
| -except NameError:
|
| - bytes = str
|
| -
|
| -try:
|
| - from StringIO import StringIO
|
| -except ImportError:
|
| - from io import StringIO
|
| -
|
| -TESTDATA = os.path.join(
|
| - os.path.dirname(os.path.abspath(__file__)),
|
| - "testdata", "nspkg")
|
| -
|
| -try:
|
| - expectedFailure = unittest.expectedFailure
|
| -except AttributeError:
|
| - import functools
|
| - def expectedFailure(function):
|
| - @functools.wraps(function)
|
| - def wrapper(*args, **kwds):
|
| - try:
|
| - function(*args, **kwds)
|
| - except AssertionError:
|
| - pass
|
| -
|
| - else:
|
| - self.fail("unexpected pass")
|
| -
|
| -class TestDependencyInfo (unittest.TestCase):
|
| - def test_pickling(self):
|
| - info = modulegraph.DependencyInfo(function=True, conditional=False, tryexcept=True, fromlist=False)
|
| - for proto in range(pickle.HIGHEST_PROTOCOL + 1):
|
| - b = pickle.dumps(info, proto)
|
| - self.assertTrue(isinstance(b, bytes))
|
| -
|
| - o = pickle.loads(b)
|
| - self.assertEqual(o, info)
|
| -
|
| - def test_merging(self):
|
| - info1 = modulegraph.DependencyInfo(function=True, conditional=False, tryexcept=True, fromlist=False)
|
| - info2 = modulegraph.DependencyInfo(function=False, conditional=True, tryexcept=True, fromlist=False)
|
| - self.assertEqual(
|
| - info1._merged(info2), modulegraph.DependencyInfo(function=True, conditional=True, tryexcept=True, fromlist=False))
|
| -
|
| - info2 = modulegraph.DependencyInfo(function=False, conditional=True, tryexcept=False, fromlist=False)
|
| - self.assertEqual(
|
| - info1._merged(info2), modulegraph.DependencyInfo(function=True, conditional=True, tryexcept=True, fromlist=False))
|
| -
|
| - info2 = modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=False)
|
| - self.assertEqual(
|
| - info1._merged(info2), modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=False))
|
| -
|
| - info1 = modulegraph.DependencyInfo(function=True, conditional=False, tryexcept=True, fromlist=True)
|
| - self.assertEqual(
|
| - info1._merged(info2), modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=False))
|
| -
|
| - info2 = modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=True)
|
| - self.assertEqual(
|
| - info1._merged(info2), modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=True))
|
| -
|
| -
|
| -class TestFunctions (unittest.TestCase):
|
| - if not hasattr(unittest.TestCase, 'assertIsInstance'):
|
| - def assertIsInstance(self, obj, types):
|
| - self.assertTrue(isinstance(obj, types), '%r is not instance of %r'%(obj, types))
|
| -
|
| - def test_eval_str_tuple(self):
|
| - for v in [
|
| - '()',
|
| - '("hello",)',
|
| - '("hello", "world")',
|
| - "('hello',)",
|
| - "('hello', 'world')",
|
| - "('hello', \"world\")",
|
| - ]:
|
| -
|
| - self.assertEqual(modulegraph._eval_str_tuple(v), eval(v))
|
| -
|
| - self.assertRaises(ValueError, modulegraph._eval_str_tuple, "")
|
| - self.assertRaises(ValueError, modulegraph._eval_str_tuple, "'a'")
|
| - self.assertRaises(ValueError, modulegraph._eval_str_tuple, "'a', 'b'")
|
| - self.assertRaises(ValueError, modulegraph._eval_str_tuple, "('a', ('b', 'c'))")
|
| - self.assertRaises(ValueError, modulegraph._eval_str_tuple, "('a', ('b\", 'c'))")
|
| -
|
| - def test_namespace_package_path(self):
|
| - class DS (object):
|
| - def __init__(self, path, namespace_packages=None):
|
| - self.location = path
|
| - self._namespace_packages = namespace_packages
|
| -
|
| - def has_metadata(self, key):
|
| - if key == 'namespace_packages.txt':
|
| - return self._namespace_packages is not None
|
| -
|
| - raise ValueError("invalid lookup key")
|
| -
|
| - def get_metadata(self, key):
|
| - if key == 'namespace_packages.txt':
|
| - if self._namespace_packages is None:
|
| - raise ValueError("no file")
|
| -
|
| - return self._namespace_packages
|
| -
|
| - raise ValueError("invalid lookup key")
|
| -
|
| - class WS (object):
|
| - def __init__(self, path=None):
|
| - pass
|
| -
|
| - def __iter__(self):
|
| - yield DS("/pkg/pkg1")
|
| - yield DS("/pkg/pkg2", "foo\n")
|
| - yield DS("/pkg/pkg3", "bar.baz\n")
|
| - yield DS("/pkg/pkg4", "foobar\nfoo\n")
|
| -
|
| - saved_ws = pkg_resources.WorkingSet
|
| - try:
|
| - pkg_resources.WorkingSet = WS
|
| -
|
| - self.assertEqual(modulegraph._namespace_package_path("sys", ["appdir/pkg"]), ["appdir/pkg"])
|
| - self.assertEqual(modulegraph._namespace_package_path("foo", ["appdir/pkg"]), ["appdir/pkg", "/pkg/pkg2/foo", "/pkg/pkg4/foo"])
|
| - self.assertEqual(modulegraph._namespace_package_path("bar.baz", ["appdir/pkg"]), ["appdir/pkg", "/pkg/pkg3/bar/baz"])
|
| -
|
| - finally:
|
| - pkg_resources.WorkingSet = saved_ws
|
| -
|
| - def test_os_listdir(self):
|
| - root = os.path.join(
|
| - os.path.dirname(os.path.abspath(__file__)), 'testdata')
|
| -
|
| - self.assertEqual(modulegraph.os_listdir('/etc/'), os.listdir('/etc'))
|
| - self.assertRaises(IOError, modulegraph.os_listdir, '/etc/hosts/foobar')
|
| - self.assertRaises(IOError, modulegraph.os_listdir, os.path.join(root, 'test.egg', 'bar'))
|
| -
|
| - self.assertEqual(list(sorted(modulegraph.os_listdir(os.path.join(root, 'test.egg', 'foo')))),
|
| - [ 'bar', 'bar.txt', 'baz.txt' ])
|
| -
|
| - def test_code_to_file(self):
|
| - try:
|
| - code = modulegraph._code_to_file.__code__
|
| - except AttributeError:
|
| - code = modulegraph._code_to_file.func_code
|
| -
|
| - data = modulegraph._code_to_file(code)
|
| - self.assertTrue(hasattr(data, 'read'))
|
| -
|
| - content = data.read()
|
| - self.assertIsInstance(content, bytes)
|
| - data.close()
|
| -
|
| - def test_find_module(self):
|
| - for path in ('syspath', 'syspath.zip', 'syspath.egg'):
|
| - path = os.path.join(os.path.dirname(TESTDATA), path)
|
| - if os.path.exists(os.path.join(path, 'mymodule.pyc')):
|
| - os.unlink(os.path.join(path, 'mymodule.pyc'))
|
| -
|
| - # Plain module
|
| - info = modulegraph.find_module('mymodule', path=[path] + sys.path)
|
| -
|
| - fp = info[0]
|
| - filename = info[1]
|
| - description = info[2]
|
| -
|
| - self.assertTrue(hasattr(fp, 'read'))
|
| -
|
| - if path.endswith('.zip') or path.endswith('.egg'):
|
| - # Zip importers may precompile
|
| - if filename.endswith('.py'):
|
| - self.assertEqual(filename, os.path.join(path, 'mymodule.py'))
|
| - self.assertEqual(description, ('.py', 'rU', imp.PY_SOURCE))
|
| -
|
| - else:
|
| - self.assertEqual(filename, os.path.join(path, 'mymodule.pyc'))
|
| - self.assertEqual(description, ('.pyc', 'rb', imp.PY_COMPILED))
|
| -
|
| - else:
|
| - self.assertEqual(filename, os.path.join(path, 'mymodule.py'))
|
| - self.assertEqual(description, ('.py', 'rU', imp.PY_SOURCE))
|
| -
|
| - # Compiled plain module, no source
|
| - if path.endswith('.zip') or path.endswith('.egg'):
|
| - self.assertRaises(ImportError, modulegraph.find_module, 'mymodule2', path=[path] + sys.path)
|
| -
|
| - else:
|
| - info = modulegraph.find_module('mymodule2', path=[path] + sys.path)
|
| -
|
| - fp = info[0]
|
| - filename = info[1]
|
| - description = info[2]
|
| -
|
| - self.assertTrue(hasattr(fp, 'read'))
|
| - self.assertEqual(filename, os.path.join(path, 'mymodule2.pyc'))
|
| - self.assertEqual(description, ('.pyc', 'rb', imp.PY_COMPILED))
|
| -
|
| - fp.close()
|
| -
|
| - # Compiled plain module, with source
|
| -# info = modulegraph.find_module('mymodule3', path=[path] + sys.path)
|
| -#
|
| -# fp = info[0]
|
| -# filename = info[1]
|
| -# description = info[2]
|
| -#
|
| -# self.assertTrue(hasattr(fp, 'read'))
|
| -#
|
| -# if sys.version_info[:2] >= (3,2):
|
| -# self.assertEqual(filename, os.path.join(path, '__pycache__', 'mymodule3.cpython-32.pyc'))
|
| -# else:
|
| -# self.assertEqual(filename, os.path.join(path, 'mymodule3.pyc'))
|
| -# self.assertEqual(description, ('.pyc', 'rb', imp.PY_COMPILED))
|
| -
|
| -
|
| - # Package
|
| - info = modulegraph.find_module('mypkg', path=[path] + sys.path)
|
| - fp = info[0]
|
| - filename = info[1]
|
| - description = info[2]
|
| -
|
| - self.assertEqual(fp, None)
|
| - self.assertEqual(filename, os.path.join(path, 'mypkg'))
|
| - self.assertEqual(description, ('', '', imp.PKG_DIRECTORY))
|
| -
|
| - # Extension
|
| - if path.endswith('.zip'):
|
| - self.assertRaises(ImportError, modulegraph.find_module, 'myext', path=[path] + sys.path)
|
| -
|
| - else:
|
| - info = modulegraph.find_module('myext', path=[path] + sys.path)
|
| - fp = info[0]
|
| - filename = info[1]
|
| - description = info[2]
|
| -
|
| - if sys.platform == 'win32':
|
| - ext = '.pyd'
|
| - else:
|
| - # This is a ly, but is good enough for now
|
| - ext = '.so'
|
| -
|
| - self.assertEqual(filename, os.path.join(path, 'myext' + ext))
|
| - self.assertEqual(description, (ext, 'rb', imp.C_EXTENSION))
|
| - self.assertEqual(fp, None)
|
| -
|
| - def test_moduleInfoForPath(self):
|
| - self.assertEqual(modulegraph.moduleInfoForPath("/somewhere/else/file.txt"), None)
|
| -
|
| - info = modulegraph.moduleInfoForPath("/somewhere/else/file.py")
|
| - self.assertEqual(info[0], "file")
|
| - if sys.version_info[:2] >= (3,4):
|
| - self.assertEqual(info[1], "r")
|
| - else:
|
| - self.assertEqual(info[1], "U")
|
| - self.assertEqual(info[2], imp.PY_SOURCE)
|
| -
|
| - info = modulegraph.moduleInfoForPath("/somewhere/else/file.pyc")
|
| - self.assertEqual(info[0], "file")
|
| - self.assertEqual(info[1], "rb")
|
| - self.assertEqual(info[2], imp.PY_COMPILED)
|
| -
|
| - if sys.platform in ('darwin', 'linux2'):
|
| - info = modulegraph.moduleInfoForPath("/somewhere/else/file.so")
|
| - self.assertEqual(info[0], "file")
|
| - self.assertEqual(info[1], "rb")
|
| - self.assertEqual(info[2], imp.C_EXTENSION)
|
| -
|
| - elif sys.platform in ('win32',):
|
| - info = modulegraph.moduleInfoForPath("/somewhere/else/file.pyd")
|
| - self.assertEqual(info[0], "file")
|
| - self.assertEqual(info[1], "rb")
|
| - self.assertEqual(info[2], imp.C_EXTENSION)
|
| -
|
| - if sys.version_info[:2] > (2,5):
|
| - exec(textwrap.dedent('''\
|
| - def test_deprecated(self):
|
| - saved_add = modulegraph.addPackagePath
|
| - saved_replace = modulegraph.replacePackage
|
| - try:
|
| - called = []
|
| -
|
| - def log_add(*args, **kwds):
|
| - called.append(('add', args, kwds))
|
| - def log_replace(*args, **kwds):
|
| - called.append(('replace', args, kwds))
|
| -
|
| - modulegraph.addPackagePath = log_add
|
| - modulegraph.replacePackage = log_replace
|
| -
|
| - with warnings.catch_warnings(record=True) as w:
|
| - warnings.simplefilter("always")
|
| - modulegraph.ReplacePackage('a', 'b')
|
| - modulegraph.AddPackagePath('c', 'd')
|
| -
|
| - self.assertEqual(len(w), 2)
|
| - self.assertTrue(w[-1].category is DeprecationWarning)
|
| - self.assertTrue(w[-2].category is DeprecationWarning)
|
| -
|
| - self.assertEqual(called, [
|
| - ('replace', ('a', 'b'), {}),
|
| - ('add', ('c', 'd'), {}),
|
| - ])
|
| -
|
| - finally:
|
| - modulegraph.addPackagePath = saved_add
|
| - modulegraph.replacePackage = saved_replace
|
| - '''), locals(), globals())
|
| -
|
| - def test_addPackage(self):
|
| - saved = modulegraph._packagePathMap
|
| - self.assertIsInstance(saved, dict)
|
| - try:
|
| - modulegraph._packagePathMap = {}
|
| -
|
| - modulegraph.addPackagePath('foo', 'a')
|
| - self.assertEqual(modulegraph._packagePathMap, { 'foo': ['a'] })
|
| -
|
| - modulegraph.addPackagePath('foo', 'b')
|
| - self.assertEqual(modulegraph._packagePathMap, { 'foo': ['a', 'b'] })
|
| -
|
| - modulegraph.addPackagePath('bar', 'b')
|
| - self.assertEqual(modulegraph._packagePathMap, { 'foo': ['a', 'b'], 'bar': ['b'] })
|
| -
|
| - finally:
|
| - modulegraph._packagePathMap = saved
|
| -
|
| -
|
| - def test_replacePackage(self):
|
| - saved = modulegraph._replacePackageMap
|
| - self.assertIsInstance(saved, dict)
|
| - try:
|
| - modulegraph._replacePackageMap = {}
|
| -
|
| - modulegraph.replacePackage("a", "b")
|
| - self.assertEqual(modulegraph._replacePackageMap, {"a": "b"})
|
| - modulegraph.replacePackage("a", "c")
|
| - self.assertEqual(modulegraph._replacePackageMap, {"a": "c"})
|
| - modulegraph.replacePackage("b", "c")
|
| - self.assertEqual(modulegraph._replacePackageMap, {"a": "c", 'b': 'c'})
|
| -
|
| - finally:
|
| - modulegraph._replacePackageMap = saved
|
| -
|
| -class TestNode (unittest.TestCase):
|
| - if not hasattr(unittest.TestCase, 'assertIsInstance'):
|
| - def assertIsInstance(self, obj, types):
|
| - self.assertTrue(isinstance(obj, types), '%r is not instance of %r'%(obj, types))
|
| - def testBasicAttributes(self):
|
| - n = modulegraph.Node("foobar.xyz")
|
| - self.assertIsInstance(n.debug, int)
|
| - self.assertEqual(n.identifier, n.graphident)
|
| - self.assertEqual(n.identifier, 'foobar.xyz')
|
| - self.assertEqual(n.filename, None)
|
| - self.assertEqual(n.packagepath, None)
|
| - self.assertEqual(n.code, None)
|
| - self.assertEqual(n.globalnames, set())
|
| - self.assertEqual(n.starimports, set())
|
| -
|
| - def testMapping(self):
|
| - n = modulegraph.Node("foobar.xyz")
|
| - self.assertEqual(n._namespace, {})
|
| -
|
| - self.assertFalse('foo' in n)
|
| - self.assertRaises(KeyError, n.__getitem__, 'foo')
|
| - self.assertEqual(n.get('foo'), None)
|
| - self.assertEqual(n.get('foo', 'a'), 'a')
|
| - n['foo'] = 42
|
| - self.assertEqual(n['foo'], 42)
|
| - self.assertTrue('foo' in n)
|
| - self.assertEqual(n._namespace, {'foo':42})
|
| -
|
| - def testOrder(self):
|
| - n1 = modulegraph.Node("n1")
|
| - n2 = modulegraph.Node("n2")
|
| -
|
| - self.assertTrue(n1 < n2)
|
| - self.assertFalse(n2 < n1)
|
| - self.assertTrue(n1 <= n1)
|
| - self.assertFalse(n1 == n2)
|
| - self.assertTrue(n1 == n1)
|
| - self.assertTrue(n1 != n2)
|
| - self.assertFalse(n1 != n1)
|
| - self.assertTrue(n2 > n1)
|
| - self.assertFalse(n1 > n2)
|
| - self.assertTrue(n1 >= n1)
|
| - self.assertTrue(n2 >= n1)
|
| -
|
| - def testHashing(self):
|
| - n1a = modulegraph.Node('n1')
|
| - n1b = modulegraph.Node('n1')
|
| - n2 = modulegraph.Node('n2')
|
| -
|
| - d = {}
|
| - d[n1a] = 'n1'
|
| - d[n2] = 'n2'
|
| - self.assertEqual(d[n1b], 'n1')
|
| - self.assertEqual(d[n2], 'n2')
|
| -
|
| - def test_infoTuple(self):
|
| - n = modulegraph.Node('n1')
|
| - self.assertEqual(n.infoTuple(), ('n1',))
|
| -
|
| - def assertNoMethods(self, klass):
|
| - d = dict(klass.__dict__)
|
| - del d['__doc__']
|
| - del d['__module__']
|
| - if '__qualname__' in d:
|
| - # New in Python 3.3
|
| - del d['__qualname__']
|
| - if '__dict__' in d:
|
| - # New in Python 3.4
|
| - del d['__dict__']
|
| - self.assertEqual(d, {})
|
| -
|
| - def assertHasExactMethods(self, klass, *methods):
|
| - d = dict(klass.__dict__)
|
| - del d['__doc__']
|
| - del d['__module__']
|
| - if '__qualname__' in d:
|
| - # New in Python 3.3
|
| - del d['__qualname__']
|
| - if '__dict__' in d:
|
| - # New in Python 3.4
|
| - del d['__dict__']
|
| -
|
| - for nm in methods:
|
| - self.assertTrue(nm in d, "%s doesn't have attribute %r"%(klass, nm))
|
| - del d[nm]
|
| -
|
| - self.assertEqual(d, {})
|
| -
|
| -
|
| - if not hasattr(unittest.TestCase, 'assertIsSubclass'):
|
| - def assertIsSubclass(self, cls1, cls2, message=None):
|
| - self.assertTrue(issubclass(cls1, cls2),
|
| - message or "%r is not a subclass of %r"%(cls1, cls2))
|
| -
|
| - def test_subclasses(self):
|
| - self.assertIsSubclass(modulegraph.AliasNode, modulegraph.Node)
|
| - self.assertIsSubclass(modulegraph.Script, modulegraph.Node)
|
| - self.assertIsSubclass(modulegraph.BadModule, modulegraph.Node)
|
| - self.assertIsSubclass(modulegraph.ExcludedModule, modulegraph.BadModule)
|
| - self.assertIsSubclass(modulegraph.MissingModule, modulegraph.BadModule)
|
| - self.assertIsSubclass(modulegraph.BaseModule, modulegraph.Node)
|
| - self.assertIsSubclass(modulegraph.BuiltinModule, modulegraph.BaseModule)
|
| - self.assertIsSubclass(modulegraph.SourceModule, modulegraph.BaseModule)
|
| - self.assertIsSubclass(modulegraph.CompiledModule, modulegraph.BaseModule)
|
| - self.assertIsSubclass(modulegraph.Package, modulegraph.BaseModule)
|
| - self.assertIsSubclass(modulegraph.Extension, modulegraph.BaseModule)
|
| -
|
| - # These classes have no new functionality, check that no code
|
| - # got added:
|
| - self.assertNoMethods(modulegraph.BadModule)
|
| - self.assertNoMethods(modulegraph.ExcludedModule)
|
| - self.assertNoMethods(modulegraph.MissingModule)
|
| - self.assertNoMethods(modulegraph.BuiltinModule)
|
| - self.assertNoMethods(modulegraph.SourceModule)
|
| - self.assertNoMethods(modulegraph.CompiledModule)
|
| - self.assertNoMethods(modulegraph.Package)
|
| - self.assertNoMethods(modulegraph.Extension)
|
| -
|
| - # AliasNode is basicly a clone of an existing node
|
| - self.assertHasExactMethods(modulegraph.Script, '__init__', 'infoTuple')
|
| - n1 = modulegraph.Node('n1')
|
| - n1.packagepath = ['a', 'b']
|
| -
|
| - a1 = modulegraph.AliasNode('a1', n1)
|
| - self.assertEqual(a1.graphident, 'a1')
|
| - self.assertEqual(a1.identifier, 'n1')
|
| - self.assertTrue(a1.packagepath is n1.packagepath)
|
| - self.assertTrue(a1._namespace is n1._namespace)
|
| - self.assertTrue(a1.globalnames is n1.globalnames)
|
| - self.assertTrue(a1.starimports is n1.starimports)
|
| -
|
| - v = a1.infoTuple()
|
| - self.assertEqual(v, ('a1', 'n1'))
|
| -
|
| - # Scripts have a filename
|
| - self.assertHasExactMethods(modulegraph.Script, '__init__', 'infoTuple')
|
| - s1 = modulegraph.Script('do_import')
|
| - self.assertEqual(s1.graphident, 'do_import')
|
| - self.assertEqual(s1.identifier, 'do_import')
|
| - self.assertEqual(s1.filename, 'do_import')
|
| -
|
| - v = s1.infoTuple()
|
| - self.assertEqual(v, ('do_import',))
|
| -
|
| - # BaseModule adds some attributes and a custom infotuple
|
| - self.assertHasExactMethods(modulegraph.BaseModule, '__init__', 'infoTuple')
|
| - m1 = modulegraph.BaseModule('foo')
|
| - self.assertEqual(m1.graphident, 'foo')
|
| - self.assertEqual(m1.identifier, 'foo')
|
| - self.assertEqual(m1.filename, None)
|
| - self.assertEqual(m1.packagepath, None)
|
| -
|
| - m1 = modulegraph.BaseModule('foo', 'bar', ['a'])
|
| - self.assertEqual(m1.graphident, 'foo')
|
| - self.assertEqual(m1.identifier, 'foo')
|
| - self.assertEqual(m1.filename, 'bar')
|
| - self.assertEqual(m1.packagepath, ['a'])
|
| -
|
| -class TestModuleGraph (unittest.TestCase):
|
| - # Test for class modulegraph.modulegraph.ModuleGraph
|
| - if not hasattr(unittest.TestCase, 'assertIsInstance'):
|
| - def assertIsInstance(self, obj, types):
|
| - self.assertTrue(isinstance(obj, types), '%r is not instance of %r'%(obj, types))
|
| -
|
| - def test_constructor(self):
|
| - o = modulegraph.ModuleGraph()
|
| - self.assertTrue(o.path is sys.path)
|
| - self.assertEqual(o.lazynodes, {})
|
| - self.assertEqual(o.replace_paths, ())
|
| - self.assertEqual(o.debug, 0)
|
| -
|
| - # Stricter tests would be nice, but that requires
|
| - # better control over what's on sys.path
|
| - self.assertIsInstance(o.nspackages, dict)
|
| -
|
| - g = Graph.Graph()
|
| - o = modulegraph.ModuleGraph(['a', 'b', 'c'], ['modA'], [
|
| - ('fromA', 'toB'), ('fromC', 'toD')],
|
| - {
|
| - 'modA': ['modB', 'modC'],
|
| - 'modC': ['modE', 'modF'],
|
| - }, g, 1)
|
| - self.assertEqual(o.path, ['a', 'b', 'c'])
|
| - self.assertEqual(o.lazynodes, {
|
| - 'modA': None,
|
| - 'modC': ['modE', 'modF'],
|
| - })
|
| - self.assertEqual(o.replace_paths, [('fromA', 'toB'), ('fromC', 'toD')])
|
| - self.assertEqual(o.nspackages, {})
|
| - self.assertTrue(o.graph is g)
|
| - self.assertEqual(o.debug, 1)
|
| -
|
| - def test_calc_setuptools_nspackages(self):
|
| - stdlib = [ fn for fn in sys.path if fn.startswith(sys.prefix) and 'site-packages' not in fn ]
|
| - for subdir in [ nm for nm in os.listdir(TESTDATA) if nm != 'src' ]:
|
| - graph = modulegraph.ModuleGraph(path=[
|
| - os.path.join(TESTDATA, subdir, "parent"),
|
| - os.path.join(TESTDATA, subdir, "child"),
|
| - ] + stdlib)
|
| -
|
| - pkgs = graph.nspackages
|
| - self.assertTrue('namedpkg' in pkgs)
|
| - self.assertEqual(set(pkgs['namedpkg']),
|
| - set([
|
| - os.path.join(TESTDATA, subdir, "parent", "namedpkg"),
|
| - os.path.join(TESTDATA, subdir, "child", "namedpkg"),
|
| - ]))
|
| - self.assertFalse(os.path.exists(os.path.join(TESTDATA, subdir, "parent", "namedpkg", "__init__.py")))
|
| - self.assertFalse(os.path.exists(os.path.join(TESTDATA, subdir, "child", "namedpkg", "__init__.py")))
|
| -
|
| - def testImpliedReference(self):
|
| - graph = modulegraph.ModuleGraph()
|
| -
|
| - record = []
|
| - def import_hook(*args):
|
| - record.append(('import_hook',) + args)
|
| - return [graph.createNode(modulegraph.Node, args[0])]
|
| -
|
| - def _safe_import_hook(*args):
|
| - record.append(('_safe_import_hook',) + args)
|
| - return [graph.createNode(modulegraph.Node, args[0])]
|
| -
|
| - graph.import_hook = import_hook
|
| - graph._safe_import_hook = _safe_import_hook
|
| -
|
| - n1 = graph.createNode(modulegraph.Node, 'n1')
|
| - n2 = graph.createNode(modulegraph.Node, 'n2')
|
| -
|
| - graph.implyNodeReference(n1, n2)
|
| - outs, ins = map(list, graph.get_edges(n1))
|
| - self.assertEqual(outs, [n2])
|
| - self.assertEqual(ins, [])
|
| -
|
| - self.assertEqual(record, [])
|
| -
|
| - graph.implyNodeReference(n2, "n3")
|
| - n3 = graph.findNode('n3')
|
| - outs, ins = map(list, graph.get_edges(n2))
|
| - self.assertEqual(outs, [n3])
|
| - self.assertEqual(ins, [n1])
|
| - self.assertEqual(record, [
|
| - ('_safe_import_hook', 'n3', n2, None)
|
| - ])
|
| -
|
| -
|
| -
|
| - @expectedFailure
|
| - def test_findNode(self):
|
| - self.fail("findNode")
|
| -
|
| - def test_run_script(self):
|
| - script = os.path.join(os.path.dirname(TESTDATA), 'script')
|
| -
|
| - graph = modulegraph.ModuleGraph()
|
| - master = graph.createNode(modulegraph.Node, 'root')
|
| - m = graph.run_script(script, master)
|
| - self.assertEqual(list(graph.get_edges(master)[0])[0], m)
|
| - self.assertEqual(set(graph.get_edges(m)[0]), set([
|
| - graph.findNode('sys'),
|
| - graph.findNode('os'),
|
| - ]))
|
| -
|
| - @expectedFailure
|
| - def test_import_hook(self):
|
| - self.fail("import_hook")
|
| -
|
| - def test_determine_parent(self):
|
| - graph = modulegraph.ModuleGraph()
|
| - graph.import_hook('os.path', None)
|
| - graph.import_hook('idlelib', None)
|
| - graph.import_hook('xml.dom', None)
|
| -
|
| - for node in graph.nodes():
|
| - if isinstance(node, modulegraph.Package):
|
| - break
|
| - else:
|
| - self.fail("No package located, should have at least 'os'")
|
| -
|
| - self.assertIsInstance(node, modulegraph.Package)
|
| - parent = graph._determine_parent(node)
|
| - self.assertEqual(parent.identifier, node.identifier)
|
| - self.assertEqual(parent, graph.findNode(node.identifier))
|
| - self.assertTrue(isinstance(parent, modulegraph.Package))
|
| -
|
| - # XXX: Might be a usecase for some odd code in determine_parent...
|
| - #node = modulegraph.Package('encodings')
|
| - #node.packagepath = parent.packagepath
|
| - #m = graph._determine_parent(node)
|
| - #self.assertTrue(m is parent)
|
| -
|
| - m = graph.findNode('xml')
|
| - self.assertEqual(graph._determine_parent(m), m)
|
| -
|
| - m = graph.findNode('xml.dom')
|
| - self.assertEqual(graph._determine_parent(m), graph.findNode('xml.dom'))
|
| -
|
| -
|
| - @expectedFailure
|
| - def test_find_head_package(self):
|
| - self.fail("find_head_package")
|
| -
|
| - def test_load_tail(self):
|
| - # XXX: This test is dodgy!
|
| - graph = modulegraph.ModuleGraph()
|
| -
|
| - record = []
|
| - def _import_module(partname, fqname, parent):
|
| - record.append((partname, fqname, parent))
|
| - if partname == 'raises' or '.raises.' in fqname:
|
| - return None
|
| - return modulegraph.Node(fqname)
|
| -
|
| - graph._import_module = _import_module
|
| -
|
| - record = []
|
| - root = modulegraph.Node('root')
|
| - m = graph._load_tail(root, '')
|
| - self.assertTrue(m is root)
|
| - self.assertEqual(record, [
|
| - ])
|
| -
|
| - record = []
|
| - root = modulegraph.Node('root')
|
| - m = graph._load_tail(root, 'sub')
|
| - self.assertFalse(m is root)
|
| - self.assertEqual(record, [
|
| - ('sub', 'root.sub', root),
|
| - ])
|
| -
|
| - record = []
|
| - root = modulegraph.Node('root')
|
| - m = graph._load_tail(root, 'sub.sub1')
|
| - self.assertFalse(m is root)
|
| - node = modulegraph.Node('root.sub')
|
| - self.assertEqual(record, [
|
| - ('sub', 'root.sub', root),
|
| - ('sub1', 'root.sub.sub1', node),
|
| - ])
|
| -
|
| - record = []
|
| - root = modulegraph.Node('root')
|
| - m = graph._load_tail(root, 'sub.sub1.sub2')
|
| - self.assertFalse(m is root)
|
| - node = modulegraph.Node('root.sub')
|
| - node2 = modulegraph.Node('root.sub.sub1')
|
| - self.assertEqual(record, [
|
| - ('sub', 'root.sub', root),
|
| - ('sub1', 'root.sub.sub1', node),
|
| - ('sub2', 'root.sub.sub1.sub2', node2),
|
| - ])
|
| -
|
| - n = graph._load_tail(root, 'raises')
|
| - self.assertIsInstance(n, modulegraph.MissingModule)
|
| - self.assertEqual(n.identifier, 'root.raises')
|
| -
|
| - n = graph._load_tail(root, 'sub.raises')
|
| - self.assertIsInstance(n, modulegraph.MissingModule)
|
| - self.assertEqual(n.identifier, 'root.sub.raises')
|
| -
|
| - n = graph._load_tail(root, 'sub.raises.sub')
|
| - self.assertIsInstance(n, modulegraph.MissingModule)
|
| - self.assertEqual(n.identifier, 'root.sub.raises.sub')
|
| -
|
| -
|
| -
|
| - @expectedFailure
|
| - def test_ensure_fromlist(self):
|
| - # 1. basic 'from module import name, name'
|
| - # 2. 'from module import *'
|
| - # 3. from module import os
|
| - # (where 'os' is not a name in 'module',
|
| - # should create MissingModule node, and
|
| - # should *not* refer to the global os)
|
| - self.fail("ensure_fromlist")
|
| -
|
| - @expectedFailure
|
| - def test_find_all_submodules(self):
|
| - # 1. basic
|
| - # 2. no packagepath (basic module)
|
| - # 3. extensions, python modules
|
| - # 4. with/without zipfile
|
| - # 5. files that aren't python modules/extensions
|
| - self.fail("find_all_submodules")
|
| -
|
| - @expectedFailure
|
| - def test_import_module(self):
|
| - self.fail("import_module")
|
| -
|
| - @expectedFailure
|
| - def test_load_module(self):
|
| - self.fail("load_module")
|
| -
|
| - @expectedFailure
|
| - def test_safe_import_hook(self):
|
| - self.fail("safe_import_hook")
|
| -
|
| - @expectedFailure
|
| - def test_scan_code(self):
|
| - mod = modulegraph.Node('root')
|
| -
|
| - graph = modulegraph.ModuleGraph()
|
| - code = compile('', '<test>', 'exec', 0, False)
|
| - graph.scan_code(code, mod)
|
| - self.assertEqual(list(graph.nodes()), [])
|
| -
|
| - node_map = {}
|
| - def _safe_import(name, mod, fromlist, level):
|
| - if name in node_map:
|
| - node = node_map[name]
|
| - else:
|
| - node = modulegraph.Node(name)
|
| - node_map[name] = node
|
| - return [node]
|
| -
|
| - graph = modulegraph.ModuleGraph()
|
| - graph._safe_import_hook = _safe_import
|
| -
|
| - code = compile(textwrap.dedent('''\
|
| - import sys
|
| - import os.path
|
| -
|
| - def testfunc():
|
| - import shutil
|
| - '''), '<test>', 'exec', 0, False)
|
| - graph.scan_code(code, mod)
|
| - modules = [node.identifier for node in graph.nodes()]
|
| - self.assertEqual(set(node_map), set(['sys', 'os.path', 'shutil']))
|
| -
|
| -
|
| - # from module import a, b, c
|
| - # from module import *
|
| - # both:
|
| - # -> with/without globals
|
| - # -> with/without modules in globals (e.g,
|
| - # from os import * adds dependency to os.path)
|
| - # from .module import a
|
| - # from ..module import a
|
| - # -> check levels
|
| - # import name
|
| - # import a.b
|
| - # -> should add dependency to a
|
| - # try to build case where commented out
|
| - # code would behave different than current code
|
| - # (Carbon.SomeMod contains 'import Sibling' seems
|
| - # to cause difference in real code)
|
| -
|
| - self.fail("actual test needed")
|
| -
|
| -
|
| -
|
| - @expectedFailure
|
| - def test_load_package(self):
|
| - self.fail("load_package")
|
| -
|
| - def test_find_module(self):
|
| - record = []
|
| - def mock_finder(name, path):
|
| - record.append((name, path))
|
| - return saved_finder(name, path)
|
| -
|
| - saved_finder = modulegraph.find_module
|
| - try:
|
| - modulegraph.find_module = mock_finder
|
| -
|
| - graph = modulegraph.ModuleGraph()
|
| - m = graph._find_module('sys', None)
|
| - self.assertEqual(record, [])
|
| - self.assertEqual(m, (None, None, ("", "", imp.C_BUILTIN)))
|
| -
|
| - modulegraph.find_module = saved_finder
|
| - xml = graph.import_hook("xml")[0]
|
| - self.assertEqual(xml.identifier, 'xml')
|
| - modulegraph.find_module = mock_finder
|
| -
|
| - self.assertRaises(ImportError, graph._find_module, 'xml', None)
|
| -
|
| - self.assertEqual(record, [])
|
| - m = graph._find_module('shutil', None)
|
| - self.assertEqual(record, [
|
| - ('shutil', graph.path),
|
| - ])
|
| - self.assertTrue(isinstance(m, tuple))
|
| - self.assertEqual(len(m), 3)
|
| - self.assertTrue(hasattr(m[0], 'read'))
|
| - self.assertIsInstance(m[0].read(), str)
|
| - srcfn = shutil.__file__
|
| - if srcfn.endswith('.pyc'):
|
| - srcfn = srcfn[:-1]
|
| - self.assertEqual(m[1], srcfn)
|
| - self.assertEqual(m[2], ('.py', 'rU', imp.PY_SOURCE))
|
| - m[0].close()
|
| -
|
| - m2 = graph._find_module('shutil', None)
|
| - self.assertEqual(m[1:], m2[1:])
|
| - m2[0].close()
|
| -
|
| -
|
| - record[:] = []
|
| - m = graph._find_module('sax', xml.packagepath, xml)
|
| - self.assertEqual(m,
|
| - (None, os.path.join(os.path.dirname(xml.filename), 'sax'),
|
| - ('', '', imp.PKG_DIRECTORY)))
|
| - self.assertEqual(record, [
|
| - ('sax', xml.packagepath),
|
| - ])
|
| - if m[0] is not None: m[0].close()
|
| -
|
| - finally:
|
| - modulegraph.find_module = saved_finder
|
| -
|
| - @expectedFailure
|
| - def test_create_xref(self):
|
| - self.fail("create_xref")
|
| -
|
| - @expectedFailure
|
| - def test_itergraphreport(self):
|
| - self.fail("itergraphreport")
|
| -
|
| - def test_report(self):
|
| - graph = modulegraph.ModuleGraph()
|
| -
|
| - saved_stdout = sys.stdout
|
| - try:
|
| - fp = sys.stdout = StringIO()
|
| - graph.report()
|
| - lines = fp.getvalue().splitlines()
|
| - fp.close()
|
| -
|
| - self.assertEqual(len(lines), 3)
|
| - self.assertEqual(lines[0], '')
|
| - self.assertEqual(lines[1], 'Class Name File')
|
| - self.assertEqual(lines[2], '----- ---- ----')
|
| -
|
| - fp = sys.stdout = StringIO()
|
| - graph._safe_import_hook('os', None, ())
|
| - graph._safe_import_hook('sys', None, ())
|
| - graph._safe_import_hook('nomod', None, ())
|
| - graph.report()
|
| - lines = fp.getvalue().splitlines()
|
| - fp.close()
|
| -
|
| - self.assertEqual(lines[0], '')
|
| - self.assertEqual(lines[1], 'Class Name File')
|
| - self.assertEqual(lines[2], '----- ---- ----')
|
| - expected = []
|
| - for n in graph.flatten():
|
| - if n.filename:
|
| - expected.append([type(n).__name__, n.identifier, n.filename])
|
| - else:
|
| - expected.append([type(n).__name__, n.identifier])
|
| -
|
| - expected.sort()
|
| - actual = [item.split() for item in lines[3:]]
|
| - actual.sort()
|
| - self.assertEqual(expected, actual)
|
| -
|
| -
|
| - finally:
|
| - sys.stdout = saved_stdout
|
| -
|
| - def test_graphreport(self):
|
| -
|
| - def my_iter(flatpackages="packages"):
|
| - yield "line1\n"
|
| - yield str(flatpackages) + "\n"
|
| - yield "line2\n"
|
| -
|
| - graph = modulegraph.ModuleGraph()
|
| - graph.itergraphreport = my_iter
|
| -
|
| - fp = StringIO()
|
| - graph.graphreport(fp)
|
| - self.assertEqual(fp.getvalue(), "line1\n()\nline2\n")
|
| -
|
| - fp = StringIO()
|
| - graph.graphreport(fp, "deps")
|
| - self.assertEqual(fp.getvalue(), "line1\ndeps\nline2\n")
|
| -
|
| - saved_stdout = sys.stdout
|
| - try:
|
| - sys.stdout = fp = StringIO()
|
| - graph.graphreport()
|
| - self.assertEqual(fp.getvalue(), "line1\n()\nline2\n")
|
| -
|
| - finally:
|
| - sys.stdout = saved_stdout
|
| -
|
| -
|
| - def test_replace_paths_in_code(self):
|
| - graph = modulegraph.ModuleGraph(replace_paths=[
|
| - ('path1', 'path2'),
|
| - ('path3/path5', 'path4'),
|
| - ])
|
| -
|
| - co = compile(textwrap.dedent("""
|
| - [x for x in range(4)]
|
| - """), "path4/index.py", 'exec', 0, 1)
|
| - co = graph._replace_paths_in_code(co)
|
| - self.assertEqual(co.co_filename, 'path4/index.py')
|
| -
|
| - co = compile(textwrap.dedent("""
|
| - [x for x in range(4)]
|
| - (x for x in range(4))
|
| - """), "path1/index.py", 'exec', 0, 1)
|
| - self.assertEqual(co.co_filename, 'path1/index.py')
|
| - co = graph._replace_paths_in_code(co)
|
| - self.assertEqual(co.co_filename, 'path2/index.py')
|
| - for c in co.co_consts:
|
| - if isinstance(c, type(co)):
|
| - self.assertEqual(c.co_filename, 'path2/index.py')
|
| -
|
| - co = compile(textwrap.dedent("""
|
| - [x for x in range(4)]
|
| - """), "path3/path4/index.py", 'exec', 0, 1)
|
| - co = graph._replace_paths_in_code(co)
|
| - self.assertEqual(co.co_filename, 'path3/path4/index.py')
|
| -
|
| - co = compile(textwrap.dedent("""
|
| - [x for x in range(4)]
|
| - """), "path3/path5.py", 'exec', 0, 1)
|
| - co = graph._replace_paths_in_code(co)
|
| - self.assertEqual(co.co_filename, 'path3/path5.py')
|
| -
|
| - co = compile(textwrap.dedent("""
|
| - [x for x in range(4)]
|
| - """), "path3/path5/index.py", 'exec', 0, 1)
|
| - co = graph._replace_paths_in_code(co)
|
| - self.assertEqual(co.co_filename, 'path4/index.py')
|
| -
|
| - def test_createReference(self):
|
| - graph = modulegraph.ModuleGraph()
|
| - n1 = modulegraph.Node('n1')
|
| - n2 = modulegraph.Node('n2')
|
| - graph.addNode(n1)
|
| - graph.addNode(n2)
|
| -
|
| - graph.createReference(n1, n2)
|
| - outs, ins = map(list, graph.get_edges(n1))
|
| - self.assertEqual(outs, [n2])
|
| - self.assertEqual(ins, [])
|
| - outs, ins = map(list, graph.get_edges(n2))
|
| - self.assertEqual(outs, [])
|
| - self.assertEqual(ins, [n1])
|
| -
|
| - e = graph.graph.edge_by_node('n1', 'n2')
|
| - self.assertIsInstance(e, int)
|
| - self.assertEqual(graph.graph.edge_data(e), 'direct')
|
| -
|
| - def test_create_xref(self):
|
| - # XXX: This test is far from optimal, it just ensures
|
| - # that all code is exercised to catch small bugs and
|
| - # py3k issues without verifying that the code actually
|
| - # works....
|
| - graph = modulegraph.ModuleGraph()
|
| - if __file__.endswith('.py'):
|
| - graph.run_script(__file__)
|
| - else:
|
| - graph.run_script(__file__[:-1])
|
| -
|
| - graph.import_hook('os')
|
| - graph.import_hook('xml.etree')
|
| - graph.import_hook('unittest')
|
| -
|
| - fp = StringIO()
|
| - graph.create_xref(out=fp)
|
| -
|
| - data = fp.getvalue()
|
| - r = ET.fromstring(data)
|
| -
|
| - def test_itergraphreport(self):
|
| - # XXX: This test is far from optimal, it just ensures
|
| - # that all code is exercised to catch small bugs and
|
| - # py3k issues without verifying that the code actually
|
| - # works....
|
| - graph = modulegraph.ModuleGraph()
|
| - if __file__.endswith('.py'):
|
| - graph.run_script(__file__)
|
| - else:
|
| - graph.run_script(__file__[:-1])
|
| - graph.import_hook('os')
|
| - graph.import_hook('xml.etree')
|
| - graph.import_hook('unittest')
|
| - graph.import_hook('distutils.command.build')
|
| -
|
| - fp = StringIO()
|
| - list(graph.itergraphreport())
|
| -
|
| - # XXX: platpackages isn't implemented, and is undocumented hence
|
| - # it is unclear what this is inteded to be...
|
| - #list(graph.itergraphreport(flatpackages=...))
|
| -
|
| -
|
| -
|
| -
|
| -class CompatTests (unittest.TestCase):
|
| - def test_Bchr(self):
|
| - v = modulegraph._Bchr(ord('A'))
|
| - if sys.version_info[0] == 2:
|
| - self.assertTrue(isinstance(v, bytes))
|
| - self.assertEqual(v, b'A')
|
| - else:
|
| - self.assertTrue(isinstance(v, int))
|
| - self.assertEqual(v, ord('A'))
|
| -
|
| -if __name__ == "__main__":
|
| - unittest.main()
|
|
|