Lib.test.test_ast_jy.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-installer Show documentation
Show all versions of jython-installer Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
"""Extra unittests for ast in Jython. Look to integrate into CPython in the
future"""
import unittest
import ast
from test import test_support
def srcExprToTree(source, kind='exec'):
return compile(source, '', kind, ast.PyCF_ONLY_AST)
class TestCompile(unittest.TestCase):
def test_compile_ast(self):
node = srcExprToTree("1/2")
compile(node, "", 'exec')
def test_alias_trim(self):
node = srcExprToTree("import os. path")
self.assertEquals(node.body[0].names[0].name, "os.path")
node = srcExprToTree("import os .path")
self.assertEquals(node.body[0].names[0].name, "os.path")
node = srcExprToTree("import os . path")
self.assertEquals(node.body[0].names[0].name, "os.path")
def test_cmpop(self):
expr = srcExprToTree('a < b < c', 'eval')
compare = expr.body
self.assert_(isinstance(compare.ops[0], ast.Lt))
self.assert_(isinstance(compare.comparators[0], ast.Name))
self.assert_(isinstance(compare.ops[1], ast.Lt))
self.assert_(isinstance(compare.comparators[1], ast.Name))
self.assert_(isinstance(compare.ops[1:][0], ast.Lt))
self.assert_(isinstance(compare.comparators[1:][0], ast.Name))
z = zip( compare.ops[1:], compare.comparators[1:])
self.assert_(isinstance(z[0][0], ast.Lt))
self.assert_(isinstance(z[0][1], ast.Name))
def test_empty_init(self):
# Jython 2.5.0 did not allow empty constructors for many ast node types
# but CPython ast nodes do allow this. For the moment, I don't see a
# reason to allow construction of the super types (like ast.AST and
# ast.stmt) as well as the op types that are implemented as enums in
# Jython (like boolop), but I've left them in but commented out for
# now. We may need them in the future since CPython allows this, but
# it may fall under implementation detail.
#ast.AST()
ast.Add()
ast.And()
ast.Assert()
ast.Assign()
ast.Attribute()
ast.AugAssign()
ast.AugLoad()
ast.AugStore()
ast.BinOp()
ast.BitAnd()
ast.BitOr()
ast.BitXor()
ast.BoolOp()
ast.Break()
ast.Call()
ast.ClassDef()
ast.Compare()
ast.Continue()
ast.Del()
ast.Delete()
ast.Dict()
ast.Div()
ast.Ellipsis()
ast.Eq()
ast.Exec()
ast.Expr()
ast.Expression()
ast.ExtSlice()
ast.FloorDiv()
ast.For()
ast.FunctionDef()
ast.GeneratorExp()
ast.Global()
ast.Gt()
ast.GtE()
ast.If()
ast.IfExp()
ast.Import()
ast.ImportFrom()
ast.In()
ast.Index()
ast.Interactive()
ast.Invert()
ast.Is()
ast.IsNot()
ast.LShift()
ast.Lambda()
ast.List()
ast.ListComp()
ast.Load()
ast.Lt()
ast.LtE()
ast.Mod()
ast.Module()
ast.Mult()
ast.Name()
ast.Not()
ast.NotEq()
ast.NotIn()
ast.Num()
ast.Or()
ast.Param()
ast.Pass()
ast.Pow()
ast.Print()
ast.RShift()
ast.Raise()
ast.Repr()
ast.Return()
ast.Slice()
ast.Store()
ast.Str()
ast.Sub()
ast.Subscript()
ast.Suite()
ast.TryExcept()
ast.TryFinally()
ast.Tuple()
ast.UAdd()
ast.USub()
ast.UnaryOp()
ast.While()
ast.With()
ast.Yield()
ast.alias()
ast.arguments()
#ast.boolop()
#ast.cmpop()
ast.comprehension()
#ast.excepthandler()
#ast.expr()
#ast.expr_context()
ast.keyword()
#ast.mod()
#ast.operator()
#ast.slice()
#ast.stmt()
#ast.unaryop()
#==============================================================================
def test_main(verbose=None):
test_classes = [TestCompile]
test_support.run_unittest(*test_classes)
if __name__ == "__main__":
test_main(verbose=True)