Exemple #1
0
  def testFutureFeatures(self):
    testcases = [
        ('from __future__ import print_function',
         imputil.FutureFeatures(print_function=True)),
        ("""\
        "module docstring"

        from __future__ import print_function
        """, imputil.FutureFeatures(print_function=True)),
        ("""\
        "module docstring"

        from __future__ import print_function, with_statement
        from __future__ import nested_scopes
        """, imputil.FutureFeatures(print_function=True)),
        ('from __future__ import absolute_import',
         imputil.FutureFeatures(absolute_import=True)),
        ('from __future__ import absolute_import, print_function',
         imputil.FutureFeatures(absolute_import=True, print_function=True)),
        ('foo = 123\nfrom __future__ import print_function',
         imputil.FutureFeatures()),
        ('import os\nfrom __future__ import print_function',
         imputil.FutureFeatures()),
    ]

    for tc in testcases:
      source, want = tc
      mod = pythonparser.parse(textwrap.dedent(source))
      _, got = imputil.parse_future_features(mod)
      self.assertEqual(want.__dict__, got.__dict__)
    def testFutureFeatures(self):
        testcases = [
            ('from __future__ import print_function',
             imputil.FutureFeatures(print_function=True)),
            ("""\
        "module docstring"

        from __future__ import print_function
        """, imputil.FutureFeatures(print_function=True)),
            ("""\
        "module docstring"

        from __future__ import print_function, with_statement
        from __future__ import nested_scopes
        """, imputil.FutureFeatures(print_function=True)),
            ('from __future__ import absolute_import',
             imputil.FutureFeatures(absolute_import=True)),
            ('from __future__ import absolute_import, print_function',
             imputil.FutureFeatures(absolute_import=True,
                                    print_function=True)),
            ('foo = 123\nfrom __future__ import print_function',
             imputil.FutureFeatures()),
            ('import os\nfrom __future__ import print_function',
             imputil.FutureFeatures()),
        ]

        for tc in testcases:
            source, want = tc
            mod = pythonparser.parse(textwrap.dedent(source))
            _, got = imputil.parse_future_features(mod)
            self.assertEqual(want.__dict__, got.__dict__)
Exemple #3
0
 def testRelativeModuleFromSubModule(self):
   imp = copy.deepcopy(self.foo2_import)
   imp.add_binding(imputil.Import.MODULE, 'foo', 1)
   baz_script = os.path.join(self.pydir, 'bar', 'baz.py')
   importer = imputil.Importer(self.rootdir, 'bar.baz', baz_script, False)
   node = pythonparser.parse('from . import foo').body[0]
   self._assert_imports_equal([imp], importer.visit(node))
 def testImportPackageModuleAbsoluteImport(self):
     imp = copy.deepcopy(self.baz_import)
     imp.add_binding(imputil.Import.MODULE, 'baz', 0)
     bar_script = os.path.join(self.pydir, 'bar', '__init__.py')
     importer = imputil.Importer(self.rootdir, 'bar', bar_script, True)
     got = importer.visit(pythonparser.parse('import baz').body[0])
     self._assert_imports_equal([imp], got)
 def testImportPackageModuleRelativeFromSubModule(self):
     imp = copy.deepcopy(self.baz2_import)
     imp.add_binding(imputil.Import.MODULE, 'baz', 1)
     foo_script = os.path.join(self.pydir, 'bar', 'foo.py')
     importer = imputil.Importer(self.rootdir, 'bar.foo', foo_script, False)
     got = importer.visit(pythonparser.parse('import baz').body[0])
     self._assert_imports_equal([imp], got)
Exemple #6
0
 def testImportPackageModuleRelativeFromSubModule(self):
   imp = copy.deepcopy(self.baz2_import)
   imp.add_binding(imputil.Import.MODULE, 'baz', 1)
   foo_script = os.path.join(self.pydir, 'bar', 'foo.py')
   importer = imputil.Importer(self.rootdir, 'bar.foo', foo_script, False)
   got = importer.visit(pythonparser.parse('import baz').body[0])
   self._assert_imports_equal([imp], got)
Exemple #7
0
 def testImportPackageModuleAbsoluteImport(self):
   imp = copy.deepcopy(self.baz_import)
   imp.add_binding(imputil.Import.MODULE, 'baz', 0)
   bar_script = os.path.join(self.pydir, 'bar', '__init__.py')
   importer = imputil.Importer(self.rootdir, 'bar', bar_script, True)
   got = importer.visit(pythonparser.parse('import baz').body[0])
   self._assert_imports_equal([imp], got)
 def testRelativeModuleFromSubModule(self):
     imp = copy.deepcopy(self.foo2_import)
     imp.add_binding(imputil.Import.MODULE, 'foo', 1)
     baz_script = os.path.join(self.pydir, 'bar', 'baz.py')
     importer = imputil.Importer(self.rootdir, 'bar.baz', baz_script, False)
     node = pythonparser.parse('from . import foo').body[0]
     self._assert_imports_equal([imp], importer.visit(node))
 def testRelativeModuleMemberMixed(self):
     imp1 = copy.deepcopy(self.fred_import)
     imp1.add_binding(imputil.Import.MEMBER, 'qux', 'qux')
     imp2 = copy.deepcopy(self.quux_import)
     imp2.add_binding(imputil.Import.MODULE, 'quux', 2)
     node = pythonparser.parse('from .fred import qux, quux').body[0]
     self._assert_imports_equal([imp1, imp2], self.bar_importer.visit(node))
Exemple #10
0
 def testRelativeModuleMemberMixed(self):
   imp1 = copy.deepcopy(self.fred_import)
   imp1.add_binding(imputil.Import.MEMBER, 'qux', 'qux')
   imp2 = copy.deepcopy(self.quux_import)
   imp2.add_binding(imputil.Import.MODULE, 'quux', 2)
   node = pythonparser.parse('from .fred import qux, quux').body[0]
   self._assert_imports_equal([imp1, imp2], self.bar_importer.visit(node))
Exemple #11
0
def _collect_imports(py_contents, modname, script, gopath):
    mod = pythonparser.parse(py_contents)
    future_node, future_features = parse_future_features(mod)
    importer = Importer(gopath, modname, script,
                        future_features.absolute_import)
    collector = _ImportCollector(importer, future_node)
    collector.visit(mod)
    return collector.imports
Exemple #12
0
def collect_imports(modname, script, gopath):
  with open(script) as py_file:
    py_contents = py_file.read()
  mod = pythonparser.parse(py_contents)
  future_node, future_features = parse_future_features(mod)
  importer = Importer(gopath, modname, script, future_features.absolute_import)
  collector = _ImportCollector(importer, future_node)
  collector.visit(mod)
  return collector.imports
Exemple #13
0
def collect_imports(modname, script, gopath):
  with open(script) as py_file:
    py_contents = py_file.read()
  mod = pythonparser.parse(py_contents)
  future_node, future_features = parse_future_features(mod)
  importer = Importer(gopath, modname, script, future_features.absolute_import)
  collector = _ImportCollector(importer, future_node)
  collector.visit(mod)
  return collector.imports
Exemple #14
0
def _ParseAndVisit(source):
  mod = pythonparser.parse(source)
  _, future_features = imputil.parse_future_features(mod)
  importer = imputil.Importer(None, 'foo', 'foo.py', False)
  b = block.ModuleBlock(importer, '__main__', '<test>',
                        source, future_features)
  visitor = stmt.StatementVisitor(b)
  visitor.visit(mod)
  return visitor
Exemple #15
0
    def testImportFromFuture(self):
        testcases = [
            ('from __future__ import print_function',
             imputil.FutureFeatures(print_function=True)),
            ('from __future__ import generators', imputil.FutureFeatures()),
            ('from __future__ import generators, print_function',
             imputil.FutureFeatures(print_function=True)),
        ]

        for tc in testcases:
            source, want = tc
            mod = pythonparser.parse(textwrap.dedent(source))
            node = mod.body[0]
            got = imputil._make_future_features(node)  # pylint: disable=protected-access
            self.assertEqual(want.__dict__, got.__dict__)
Exemple #16
0
  def testImportFromFuture(self):
    testcases = [
        ('from __future__ import print_function',
         imputil.FutureFeatures(print_function=True)),
        ('from __future__ import generators', imputil.FutureFeatures()),
        ('from __future__ import generators, print_function',
         imputil.FutureFeatures(print_function=True)),
    ]

    for tc in testcases:
      source, want = tc
      mod = pythonparser.parse(textwrap.dedent(source))
      node = mod.body[0]
      got = imputil._make_future_features(node)  # pylint: disable=protected-access
      self.assertEqual(want.__dict__, got.__dict__)
Exemple #17
0
    def testImportFromFutureParseError(self):
        testcases = [
            # NOTE: move this group to testImportFromFuture as they are implemented
            # by grumpy
            ('from __future__ import division',
             r'future feature \w+ not yet implemented'),
            ('from __future__ import braces', 'not a chance'),
            ('from __future__ import nonexistant_feature',
             r'future feature \w+ is not defined'),
        ]

        for tc in testcases:
            source, want_regexp = tc
            mod = pythonparser.parse(source)
            node = mod.body[0]
            self.assertRaisesRegexp(util.ParseError, want_regexp,
                                    imputil._make_future_features, node)  # pylint: disable=protected-access
Exemple #18
0
  def testImportFromFutureParseError(self):
    testcases = [
        # NOTE: move this group to testImportFromFuture as they are implemented
        # by grumpy
        ('from __future__ import division',
         r'future feature \w+ not yet implemented'),
        ('from __future__ import braces', 'not a chance'),
        ('from __future__ import nonexistant_feature',
         r'future feature \w+ is not defined'),
    ]

    for tc in testcases:
      source, want_regexp = tc
      mod = pythonparser.parse(source)
      node = mod.body[0]
      self.assertRaisesRegexp(util.ParseError, want_regexp,
                              imputil._make_future_features, node)  # pylint: disable=protected-access
Exemple #19
0
 def testRelativeImportNonPackage(self):
     self.assertRaises(util.ImportError, self.importer.visit,
                       pythonparser.parse('from . import bar').body[0])
Exemple #20
0
 def testImportFromWildcardRaises(self):
     self.assertRaises(util.ImportError, self.importer.visit,
                       pythonparser.parse('from foo import *').body[0])
Exemple #21
0
 def testImportFromWildcardRaises(self):
   self.assertRaises(util.ImportError, self.importer.visit,
                     pythonparser.parse('from foo import *').body[0])
Exemple #22
0
 def testRelativeUpLevelMember(self):
   imp = copy.deepcopy(self.foo2_import)
   imp.add_binding(imputil.Import.MEMBER, 'qux', 'qux')
   node = pythonparser.parse('from ..foo import qux').body[0]
   self._assert_imports_equal([imp], self.fred_importer.visit(node))
Exemple #23
0
 def _check_imports(self, stmt, want):
     got = self.importer.visit(pythonparser.parse(stmt).body[0])
     self._assert_imports_equal(want, got)
Exemple #24
0
 def testRelativeUpLevel(self):
     imp = copy.deepcopy(self.foo2_import)
     imp.add_binding(imputil.Import.MODULE, 'foo', 1)
     node = pythonparser.parse('from .. import foo').body[0]
     self._assert_imports_equal([imp], self.fred_importer.visit(node))
Exemple #25
0
 def testImportPackageModuleRelative(self):
   imp = copy.deepcopy(self.baz2_import)
   imp.add_binding(imputil.Import.MODULE, 'baz', 1)
   got = self.bar_importer.visit(pythonparser.parse('import baz').body[0])
   self._assert_imports_equal([imp], got)
Exemple #26
0
 def testRelativeModuleNoExist(self):
   self.assertRaises(util.ImportError, self.bar_importer.visit,
                     pythonparser.parse('from . import qux').body[0])
Exemple #27
0
def _ParseStmt(stmt_str):
  return pythonparser.parse(stmt_str).body[0]
Exemple #28
0
 def testRelativeModuleMember(self):
     imp = imputil.Import('bar.foo')
     imp.add_binding(imputil.Import.MEMBER, 'qux', 'qux')
     node = pythonparser.parse('from .foo import qux').body[0]
     self._assert_imports_equal([imp], self.bar_importer.visit(node))
Exemple #29
0
 def _check_imports(self, stmt, want):
   got = self.importer.visit(pythonparser.parse(stmt).body[0])
   self._assert_imports_equal(want, got)
Exemple #30
0
 def testRelativeImportBeyondTopLevel(self):
     self.assertRaises(util.ImportError, self.bar_importer.visit,
                       pythonparser.parse('from .. import qux').body[0])
Exemple #31
0
 def testRelativeImportBeyondTopLevel(self):
   self.assertRaises(util.ImportError, self.bar_importer.visit,
                     pythonparser.parse('from .. import qux').body[0])
Exemple #32
0
 def testRelativeModuleNoExist(self):
     self.assertRaises(util.ImportError, self.bar_importer.visit,
                       pythonparser.parse('from . import qux').body[0])
Exemple #33
0
def _ParseExpr(expr):
    return pythonparser.parse(expr).body[0].value
Exemple #34
0
 def testImportNativeRaises(self):
     self.assertRaises(util.ImportError, self.importer.visit,
                       pythonparser.parse('import __go__.fmt').body[0])
Exemple #35
0
 def testImportPackageModuleRelative(self):
     imp = copy.deepcopy(self.baz2_import)
     imp.add_binding(imputil.Import.MODULE, 'baz', 1)
     got = self.bar_importer.visit(pythonparser.parse('import baz').body[0])
     self._assert_imports_equal([imp], got)
Exemple #36
0
 def testRelativeUpLevelMember(self):
     imp = copy.deepcopy(self.foo2_import)
     imp.add_binding(imputil.Import.MEMBER, 'qux', 'qux')
     node = pythonparser.parse('from ..foo import qux').body[0]
     self._assert_imports_equal([imp], self.fred_importer.visit(node))
Exemple #37
0
 def testRelativeImportNonPackage(self):
   self.assertRaises(util.ImportError, self.importer.visit,
                     pythonparser.parse('from . import bar').body[0])
Exemple #38
0
 def testUnimplementedFutureRaises(self):
     mod = pythonparser.parse('from __future__ import division')
     msg = 'future feature division not yet implemented by grumpy'
     self.assertRaisesRegexp(util.ParseError, msg,
                             imputil.parse_future_features, mod)
Exemple #39
0
 def testRelativeUpLevel(self):
   imp = copy.deepcopy(self.foo2_import)
   imp.add_binding(imputil.Import.MODULE, 'foo', 1)
   node = pythonparser.parse('from .. import foo').body[0]
   self._assert_imports_equal([imp], self.fred_importer.visit(node))
Exemple #40
0
 def testImportEmptyPath(self):
     importer = imputil.Importer(None, 'foo', 'foo.py', False)
     self.assertRaises(util.ImportError, importer.visit,
                       pythonparser.parse('import bar').body[0])
Exemple #41
0
 def testRelativeModule(self):
     imp = imputil.Import('bar.foo')
     imp.add_binding(imputil.Import.MODULE, 'foo', 1)
     node = pythonparser.parse('from . import foo').body[0]
     self._assert_imports_equal([imp], self.bar_importer.visit(node))
Exemple #42
0
 def testUndefinedFutureRaises(self):
     mod = pythonparser.parse('from __future__ import foo')
     self.assertRaisesRegexp(util.ParseError,
                             'future feature foo is not defined',
                             imputil.parse_future_features, mod)
Exemple #43
0
 def testUnimplementedFutureRaises(self):
   mod = pythonparser.parse('from __future__ import division')
   msg = 'future feature division not yet implemented by grumpy'
   self.assertRaisesRegexp(util.ParseError, msg,
                           imputil.parse_future_features, mod)
Exemple #44
0
 def testGlobalUsedPriorToDeclaration(self):
   node = pythonparser.parse('foo = 42\nglobal foo')
   visitor = block.BlockVisitor()
   self.assertRaisesRegexp(util.ParseError, 'used prior to global declaration',
                           visitor.generic_visit, node)
Exemple #45
0
 def testUndefinedFutureRaises(self):
   mod = pythonparser.parse('from __future__ import foo')
   self.assertRaisesRegexp(
       util.ParseError, 'future feature foo is not defined',
       imputil.parse_future_features, mod)
Exemple #46
0
 def testImportEmptyPath(self):
   importer = imputil.Importer(None, 'foo', 'foo.py', False)
   self.assertRaises(util.ImportError, importer.visit,
                     pythonparser.parse('import bar').body[0])
Exemple #47
0
def _ParseExpr(expr):
  return pythonparser.parse(expr).body[0].value