Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Unified Diff: tools/telemetry/third_party/modulegraph/modulegraph_tests/test_modulegraph.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698