Beispiel #1
0
 def test_interp(self):
     assert self.parse_expr(r'``') == ast.InterpString([''], [])
     assert self.parse_expr(r'`${1}`') == ast.InterpString(
         ['', ''], [ast.Number(1)])
     assert self.parse_expr(r'`foo${1}bar`') == ast.InterpString(
         ['foo', 'bar'], [ast.Number(1)])
     assert self.parse_expr(r'`${1 + 2}`') == ast.InterpString(
         ['', ''], [ast.BinOp('+', ast.Number(1), ast.Number(2), oppos=(18, 19))])
Beispiel #2
0
 def test_various_kinds_of_calls(self):
     r = self.parse('x(1, 2, 3)')
     assert r == ast.Call(
         ast.Identifier('x'),
         [ast.Number(1), ast.Number(2),
          ast.Number(3)])
     r = self.parse('(1)(2)')
     assert r == ast.Call(ast.Number(1), [ast.Number(2)])
Beispiel #3
0
 def test_var(self):
     r = self.parse('''
         let x;
         x = 3;
         x = x + 1;
         ''')
     assert r == [
         ast.VarDeclaration([ast.Var('x', ast.NoTypeDecl(), None)]),
         ast.Assignment('x', ast.Number(3)),
         ast.Assignment('x', ast.BinOp('+', ast.Identifier('x'),
                                       ast.Number(1), oppos=(46, 47)))]
Beispiel #4
0
 def test_var(self):
     r = self.parse('''
         var x;
         x = 3;
         x = x + 1;
         ''')
     assert r == [
         ast.VarDeclaration(['x']),
         ast.Assignment('x', ast.Number(3)),
         ast.Assignment('x',
                        ast.BinOp('+', ast.Identifier('x'), ast.Number(1)))
     ]
Beispiel #5
0
 def test_call_with_named_args(self):
     r = self.parse('x(a=1, b=2)')
     assert r == ast.Call(ast.Identifier('x'), [], [
         ast.NamedArg('a', ast.Number(1)),
         ast.NamedArg('b', ast.Number(2)),
     ])
     r = self.parse('x(1, b=2)')
     assert r == ast.Call(ast.Identifier('x'), [ast.Number(1)], [
         ast.NamedArg('b', ast.Number(2)),
     ])
     self.parse_bad('x(1=b)')
     self.parse_bad('x(1, a=2, 3')
Beispiel #6
0
 def test_while_loop(self):
     r = self.parse('''
         let i, s;
         i = 0;
         while i < 10 {
             i = i + 1;
             s = s + i;
         }
         return s;
         ''')
     assert r == [
         ast.VarDeclaration([ast.Var('i', ast.NoTypeDecl(), None),
                             ast.Var('s', ast.NoTypeDecl(), None)]),
         ast.Assignment('i', ast.Number(0)),
         ast.While(
             ast.BinOp('<', ast.Identifier('i'), ast.Number(10), oppos=(51, 52)), [
                 ast.Assignment('i', ast.BinOp(
                     '+', ast.Identifier('i'), ast.Number(1), oppos=(72, 73))),
                 ast.Assignment('s', ast.BinOp(
                     '+', ast.Identifier('s'), ast.Identifier('i'), oppos=(91, 92)))]),
         ast.Return(ast.Identifier('s'))]
Beispiel #7
0
 def test_while_loop(self):
     r = self.parse('''
         var i, s;
         i = 0;
         while i < 10 {
             i = i + 1;
             s = s + i;
         }
         return s;
         ''')
     assert r == [
         ast.VarDeclaration(['i', 's']),
         ast.Assignment('i', ast.Number(0)),
         ast.While(ast.BinOp('<', ast.Identifier('i'), ast.Number(10)), [
             ast.Assignment(
                 'i', ast.BinOp('+', ast.Identifier('i'), ast.Number(1))),
             ast.Assignment(
                 's',
                 ast.BinOp('+', ast.Identifier('s'), ast.Identifier('i')))
         ]),
         ast.Return(ast.Identifier('s'))
     ]
Beispiel #8
0
 def expression_number(state, p):
     return ast.Number(int(p[0].getstr()), srcpos=sr(p))
Beispiel #9
0
 def constant_val_int(state, p):
     return ast.Number(int(p[0].getstr()), srcpos=sr(p))
Beispiel #10
0
 def test_add(self):
     assert self.parse('1 + 1') == ast.BinOp('+', ast.Number(1),
                                             ast.Number(1))
Beispiel #11
0
 def expression_number(state, p):
     return ast.Number(int(p[0].getstr()))