Use test functions instead of unittest.TestCase
This commit is contained in:
parent
55c205f87e
commit
8afd13cb16
@ -20,33 +20,25 @@
|
|||||||
# DEALINGS IN THE SOFTWARE.
|
# DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
import ast
|
import ast
|
||||||
import sys
|
|
||||||
|
|
||||||
from hy import compiler
|
from hy import compiler
|
||||||
from hy.models import HyExpression, HyList, HySymbol, HyInteger
|
from hy.models import HyExpression, HyList, HySymbol, HyInteger
|
||||||
from hy._compat import PY3
|
from hy._compat import PY3
|
||||||
|
|
||||||
if sys.version_info[0] <= 2 and sys.version_info[1] <= 6:
|
|
||||||
import unittest2 as unittest
|
def test_builds_with_dash():
|
||||||
else:
|
assert callable(compiler.builds("foobar"))
|
||||||
import unittest
|
assert callable(compiler.builds("foo_bar"))
|
||||||
|
assert callable(compiler.builds("-"))
|
||||||
|
try:
|
||||||
|
compiler.builds("foobar-with-dash-")
|
||||||
|
except TypeError as e:
|
||||||
|
assert "*post* translated strings" in str(e)
|
||||||
|
else:
|
||||||
|
assert False
|
||||||
|
|
||||||
|
|
||||||
class CompilerTest(unittest.TestCase):
|
def make_expression(*args):
|
||||||
|
|
||||||
def test_builds_with_dash(self):
|
|
||||||
self.assert_(callable(compiler.builds("foobar")))
|
|
||||||
self.assert_(callable(compiler.builds("foo_bar")))
|
|
||||||
self.assert_(callable(compiler.builds("-")))
|
|
||||||
self.assertRaisesRegexp(TypeError,
|
|
||||||
r"\*post\* translated strings",
|
|
||||||
compiler.builds, "foobar-with-dash-")
|
|
||||||
|
|
||||||
|
|
||||||
class HyASTCompilerTest(unittest.TestCase):
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _make_expression(*args):
|
|
||||||
h = HyExpression(args)
|
h = HyExpression(args)
|
||||||
h.start_line = 1
|
h.start_line = 1
|
||||||
h.end_line = 1
|
h.end_line = 1
|
||||||
@ -54,33 +46,30 @@ class HyASTCompilerTest(unittest.TestCase):
|
|||||||
h.end_column = 1
|
h.end_column = 1
|
||||||
return h.replace(h)
|
return h.replace(h)
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
self.c = compiler.HyASTCompiler('test')
|
|
||||||
|
|
||||||
def test_compiler_bare_names(self):
|
def test_compiler_bare_names():
|
||||||
"""
|
"""
|
||||||
Check that the compiler doesn't drop bare names from code branches
|
Check that the compiler doesn't drop bare names from code branches
|
||||||
"""
|
"""
|
||||||
ret = self.c.compile(self._make_expression(HySymbol("do"),
|
e = make_expression(HySymbol("do"),
|
||||||
HySymbol("a"),
|
HySymbol("a"),
|
||||||
HySymbol("b"),
|
HySymbol("b"),
|
||||||
HySymbol("c")))
|
HySymbol("c"))
|
||||||
|
ret = compiler.HyASTCompiler('test').compile(e)
|
||||||
|
|
||||||
# We expect two statements and a final expr.
|
# We expect two statements and a final expr.
|
||||||
self.assertEqual(len(ret.stmts), 2)
|
|
||||||
stmt = ret.stmts[0]
|
|
||||||
self.assertIsInstance(stmt, ast.Expr)
|
|
||||||
self.assertIsInstance(stmt.value, ast.Name)
|
|
||||||
self.assertEqual(stmt.value.id, "a")
|
|
||||||
stmt = ret.stmts[1]
|
|
||||||
self.assertIsInstance(stmt, ast.Expr)
|
|
||||||
self.assertIsInstance(stmt.value, ast.Name)
|
|
||||||
self.assertEqual(stmt.value.id, "b")
|
|
||||||
expr = ret.expr
|
|
||||||
self.assertIsInstance(expr, ast.Name)
|
|
||||||
self.assertEqual(expr.id, "c")
|
|
||||||
|
|
||||||
def test_compiler_yield_return(self):
|
assert len(ret.stmts) == 2
|
||||||
|
for stmt, symbol in zip(ret.stmts, "ab"):
|
||||||
|
assert isinstance(stmt, ast.Expr)
|
||||||
|
assert isinstance(stmt.value, ast.Name)
|
||||||
|
assert stmt.value.id == symbol
|
||||||
|
|
||||||
|
assert isinstance(ret.expr, ast.Name)
|
||||||
|
assert ret.expr.id == "c"
|
||||||
|
|
||||||
|
|
||||||
|
def test_compiler_yield_return():
|
||||||
"""
|
"""
|
||||||
Check that the compiler correctly generates return statements for
|
Check that the compiler correctly generates return statements for
|
||||||
a generator function. In Python versions prior to 3.3, the return
|
a generator function. In Python versions prior to 3.3, the return
|
||||||
@ -88,28 +77,28 @@ class HyASTCompilerTest(unittest.TestCase):
|
|||||||
should not generate a return statement. From 3.3 onwards a return
|
should not generate a return statement. From 3.3 onwards a return
|
||||||
value should be generated.
|
value should be generated.
|
||||||
"""
|
"""
|
||||||
ret = self.c.compile_function_def(
|
e = make_expression(HySymbol("fn"),
|
||||||
self._make_expression(HySymbol("fn"),
|
|
||||||
HyList(),
|
HyList(),
|
||||||
HyExpression([HySymbol("yield"),
|
HyExpression([HySymbol("yield"),
|
||||||
HyInteger(2)]),
|
HyInteger(2)]),
|
||||||
HyExpression([HySymbol("+"),
|
HyExpression([HySymbol("+"),
|
||||||
HyInteger(1),
|
HyInteger(1),
|
||||||
HyInteger(1)])))
|
HyInteger(1)]))
|
||||||
|
ret = compiler.HyASTCompiler('test').compile_function_def(e)
|
||||||
|
|
||||||
self.assertEqual(len(ret.stmts), 1)
|
assert len(ret.stmts) == 1
|
||||||
stmt = ret.stmts[0]
|
stmt, = ret.stmts
|
||||||
self.assertIsInstance(stmt, ast.FunctionDef)
|
assert isinstance(stmt, ast.FunctionDef)
|
||||||
body = stmt.body
|
body = stmt.body
|
||||||
self.assertEquals(len(body), 2)
|
assert len(body) == 2
|
||||||
self.assertIsInstance(body[0], ast.Expr)
|
assert isinstance(body[0], ast.Expr)
|
||||||
self.assertIsInstance(body[0].value, ast.Yield)
|
assert isinstance(body[0].value, ast.Yield)
|
||||||
|
|
||||||
if PY3:
|
if PY3:
|
||||||
# From 3.3+, the final statement becomes a return value
|
# From 3.3+, the final statement becomes a return value
|
||||||
self.assertIsInstance(body[1], ast.Return)
|
assert isinstance(body[1], ast.Return)
|
||||||
self.assertIsInstance(body[1].value, ast.BinOp)
|
assert isinstance(body[1].value, ast.BinOp)
|
||||||
else:
|
else:
|
||||||
# In earlier versions, the expression is not returned
|
# In earlier versions, the expression is not returned
|
||||||
self.assertIsInstance(body[1], ast.Expr)
|
assert isinstance(body[1], ast.Expr)
|
||||||
self.assertIsInstance(body[1].value, ast.BinOp)
|
assert isinstance(body[1].value, ast.BinOp)
|
||||||
|
Loading…
Reference in New Issue
Block a user