Example #1
0
 def testFieldExpKey(self):
     p = get_parser('[1] = 2')
     node = p._field()
     self.assertIsNotNone(node)
     self.assertEqual(7, p._pos)
     self.assertTrue(isinstance(node, parser.FieldExpKey))
     self.assertTrue(node.key_exp.value.matches(lexer.TokNumber('1')))
     self.assertTrue(node.exp.value.matches(lexer.TokNumber('2')))
Example #2
0
 def testPrefixExpParenExp(self):
     p = get_parser('(2 + 3)')
     node = p._prefixexp()
     self.assertIsNotNone(node)
     self.assertEqual(7, p._pos)
     self.assertTrue(isinstance(node, parser.ExpBinOp))
     self.assertTrue(node.exp1.value.matches(lexer.TokNumber('2')))
     self.assertEqual('+', node.binop.value)
     self.assertTrue(node.exp2.value.matches(lexer.TokNumber('3')))
Example #3
0
 def testStatForStep(self):
     p = get_parser('for foo=1,3,10 do break end')
     node = p._stat()
     self.assertIsNotNone(node)
     self.assertEqual(15, p._pos)
     self.assertEqual('foo', node.name.value)
     self.assertTrue(node.exp_init.value.matches(lexer.TokNumber('1')))
     self.assertTrue(node.exp_end.value.matches(lexer.TokNumber('3')))
     self.assertTrue(node.exp_step.value.matches(lexer.TokNumber('10')))
     self.assertEqual(1, len(node.block.stats))
     self.assertTrue(isinstance(node.block.stats[0], parser.StatBreak))
Example #4
0
 def testPrefixExpIndex(self):
     p = get_parser('foo[4 + 5]')
     node = p._prefixexp()
     self.assertIsNotNone(node)
     self.assertEqual(8, p._pos)
     self.assertTrue(isinstance(node, parser.VarIndex))
     self.assertEqual('foo', node.exp_prefix.name.value)
     self.assertTrue(node.exp_index.exp1.value.matches(
         lexer.TokNumber('4')))
     self.assertEqual('+', node.exp_index.binop.value)
     self.assertTrue(node.exp_index.exp2.value.matches(
         lexer.TokNumber('5')))
Example #5
0
 def testStatFunctionCall(self):
     p = get_parser('foo(1, 2, 3)')
     node = p._stat()
     self.assertIsNotNone(node)
     self.assertEqual(10, p._pos)
     self.assertEqual('foo', node.functioncall.exp_prefix.name.value)
     self.assertEqual(3, len(node.functioncall.args.explist.exps))
     self.assertTrue(node.functioncall.args.explist.exps[0].value.matches(
         lexer.TokNumber('1')))
     self.assertTrue(node.functioncall.args.explist.exps[1].value.matches(
         lexer.TokNumber('2')))
     self.assertTrue(node.functioncall.args.explist.exps[2].value.matches(
         lexer.TokNumber('3')))
Example #6
0
 def testExpBinOpChain(self):
     p = get_parser('1 + 2 * 3 - 4 / 5..6^7 > 8 != foo')
     node = p._exp()
     self.assertIsNotNone(node)
     self.assertEqual(29, p._pos)
     self.assertEqual('foo', node.exp2.value.name.value)
     self.assertEqual('!=', node.binop.value)
     self.assertTrue(node.exp1.exp2.value.matches(lexer.TokNumber('8')))
     self.assertEqual('>', node.exp1.binop.value)
     self.assertTrue(node.exp1.exp1.exp2.value.matches(
         lexer.TokNumber('7')))
     self.assertEqual('^', node.exp1.exp1.binop.value)
     self.assertTrue(
         node.exp1.exp1.exp1.exp2.value.matches(lexer.TokNumber('6')))
     self.assertEqual('..', node.exp1.exp1.exp1.binop.value)
     self.assertTrue(
         node.exp1.exp1.exp1.exp1.exp2.value.matches(lexer.TokNumber('5')))
     self.assertEqual('/', node.exp1.exp1.exp1.exp1.binop.value)
     self.assertTrue(
         node.exp1.exp1.exp1.exp1.exp1.exp2.value.matches(
             lexer.TokNumber('4')))
     self.assertEqual('-', node.exp1.exp1.exp1.exp1.exp1.binop.value)
     self.assertTrue(
         node.exp1.exp1.exp1.exp1.exp1.exp1.exp2.value.matches(
             lexer.TokNumber('3')))
     self.assertEqual('*', node.exp1.exp1.exp1.exp1.exp1.exp1.binop.value)
     self.assertTrue(
         node.exp1.exp1.exp1.exp1.exp1.exp1.exp1.exp2.value.matches(
             lexer.TokNumber('2')))
     self.assertEqual('+',
                      node.exp1.exp1.exp1.exp1.exp1.exp1.exp1.binop.value)
     self.assertTrue(
         node.exp1.exp1.exp1.exp1.exp1.exp1.exp1.exp1.value.matches(
             lexer.TokNumber('1')))
Example #7
0
 def testStatForIn(self):
     p = get_parser('for foo, bar in 1, 3 do\n  break\nend\n')
     node = p._stat()
     self.assertIsNotNone(node)
     self.assertEqual(20, p._pos)
     self.assertEqual(2, len(node.namelist.names))
     self.assertEqual('foo', node.namelist.names[0].value)
     self.assertEqual('bar', node.namelist.names[1].value)
     self.assertEqual(2, len(node.explist.exps))
     self.assertTrue(node.explist.exps[0].value.matches(
         lexer.TokNumber('1')))
     self.assertTrue(node.explist.exps[1].value.matches(
         lexer.TokNumber('3')))
     self.assertEqual(1, len(node.block.stats))
     self.assertTrue(isinstance(node.block.stats[0], parser.StatBreak))
Example #8
0
 def testArgsTableConstructor(self):
     p = get_parser('{5,}')
     node = p._args()
     self.assertIsNotNone(node)
     self.assertEqual(4, p._pos)
     self.assertEqual(1, len(node.fields))
     self.assertTrue(node.fields[0].exp.value.matches(lexer.TokNumber('5')))
Example #9
0
 def testVarIndex(self):
     p = get_parser('bar[7]')
     node = p._var()
     self.assertIsNotNone(node)
     self.assertEqual(4, p._pos)
     self.assertEqual('bar', node.exp_prefix.name.value)
     self.assertTrue(node.exp_index.value.matches(lexer.TokNumber('7')))
Example #10
0
 def testStatLocalAssignmentWithValues(self):
     p = get_parser('local foo, bar, baz = 1, 2, 3')
     node = p._stat()
     self.assertIsNotNone(node)
     self.assertEqual(19, p._pos)
     self.assertEqual(3, len(node.namelist.names))
     self.assertEqual('foo', node.namelist.names[0].value)
     self.assertEqual('bar', node.namelist.names[1].value)
     self.assertEqual('baz', node.namelist.names[2].value)
     self.assertEqual(3, len(node.explist.exps))
     self.assertTrue(node.explist.exps[0].value.matches(
         lexer.TokNumber('1')))
     self.assertTrue(node.explist.exps[1].value.matches(
         lexer.TokNumber('2')))
     self.assertTrue(node.explist.exps[2].value.matches(
         lexer.TokNumber('3')))
Example #11
0
 def testStatAssignment(self):
     p = get_parser('foo, bar, baz = 1, 2, 3')
     node = p._stat()
     self.assertIsNotNone(node)
     self.assertEqual(17, p._pos)
     self.assertEqual(3, len(node.varlist.vars))
     self.assertEqual('foo', node.varlist.vars[0].name.value)
     self.assertEqual('bar', node.varlist.vars[1].name.value)
     self.assertEqual('baz', node.varlist.vars[2].name.value)
     self.assertTrue(node.assignop.matches(lexer.TokSymbol('=')))
     self.assertEqual(3, len(node.explist.exps))
     self.assertTrue(node.explist.exps[0].value.matches(
         lexer.TokNumber('1')))
     self.assertTrue(node.explist.exps[1].value.matches(
         lexer.TokNumber('2')))
     self.assertTrue(node.explist.exps[2].value.matches(
         lexer.TokNumber('3')))
Example #12
0
 def testExpList(self):
     p = get_parser(b'1, 2, 3 - 4, a..b^7, foo')
     node = p._explist()
     self.assertIsNotNone(node)
     self.assertEqual(21, p._pos)
     self.assertEqual(5, len(node.exps))
     self.assertTrue(node.exps[0].value.matches(lexer.TokNumber(b'1')))
     self.assertTrue(node.exps[1].value.matches(lexer.TokNumber(b'2')))
     self.assertTrue(node.exps[2].exp1.value.matches(lexer.TokNumber(b'3')))
     self.assertEqual(b'-', node.exps[2].binop.value)
     self.assertTrue(node.exps[2].exp2.value.matches(lexer.TokNumber(b'4')))
     self.assertEqual(b'a', node.exps[3].exp1.exp1.value.name.value)
     self.assertEqual(b'..', node.exps[3].exp1.binop.value)
     self.assertEqual(b'b', node.exps[3].exp1.exp2.value.name.value)
     self.assertEqual(b'^', node.exps[3].binop.value)
     self.assertTrue(node.exps[3].exp2.value.matches(lexer.TokNumber(b'7')))
     self.assertEqual(b'foo', node.exps[4].value.name.value)
Example #13
0
 def testNegatedNumber(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'-1.234567890e-6\n')
     self.assertEqual(3, len(lxr._tokens))
     self.assertEqual(lexer.TokSymbol(b'-'),
                      lxr._tokens[0])
     self.assertEqual(lexer.TokNumber(b'1.234567890e-6'),
                      lxr._tokens[1])
Example #14
0
 def testExpUnOpMinus(self):
     p = get_parser('-45')
     node = p._exp()
     self.assertIsNotNone(node)
     self.assertTrue(isinstance(node, parser.ExpUnOp))
     self.assertEqual('-', node.unop.value)
     self.assertTrue(isinstance(node.exp, parser.ExpValue))
     self.assertTrue(node.exp.value.matches(lexer.TokNumber('45')))
Example #15
0
 def testTableConstructorTrailingSep(self):
     p = get_parser(b'{5,}')
     node = p._tableconstructor()
     self.assertIsNotNone(node)
     self.assertEqual(4, p._pos)
     self.assertEqual(1, len(node.fields))
     self.assertTrue(node.fields[0].exp.value.matches(
         lexer.TokNumber(b'5')))
Example #16
0
 def testFieldNamedKey(self):
     p = get_parser('foo = 3')
     node = p._field()
     self.assertIsNotNone(node)
     self.assertEqual(5, p._pos)
     self.assertTrue(isinstance(node, parser.FieldNamedKey))
     self.assertEqual('foo', node.key_name.value)
     self.assertTrue(node.exp.value.matches(lexer.TokNumber('3')))
Example #17
0
    def testTableConstructor(self):
        p = get_parser('{[1]=2,foo=3;4}')
        node = p._tableconstructor()
        self.assertIsNotNone(node)
        self.assertEqual(13, p._pos)
        self.assertTrue(isinstance(node, parser.TableConstructor))
        self.assertEqual(3, len(node.fields))

        self.assertTrue(isinstance(node.fields[0], parser.FieldExpKey))
        self.assertTrue(node.fields[0].key_exp.value.matches(
            lexer.TokNumber('1')))
        self.assertTrue(node.fields[0].exp.value.matches(lexer.TokNumber('2')))

        self.assertTrue(isinstance(node.fields[1], parser.FieldNamedKey))
        self.assertEqual('foo', node.fields[1].key_name.value)
        self.assertTrue(node.fields[1].exp.value.matches(lexer.TokNumber('3')))

        self.assertTrue(isinstance(node.fields[2], parser.FieldExp))
        self.assertTrue(node.fields[2].exp.value.matches(lexer.TokNumber('4')))
Example #18
0
 def testVarList(self):
     p = get_parser('foo, bar[7], baz.bat')
     node = p._varlist()
     self.assertIsNotNone(node)
     self.assertEqual(12, p._pos)
     self.assertEqual(3, len(node.vars))
     self.assertEqual('foo', node.vars[0].name.value)
     self.assertEqual('bar', node.vars[1].exp_prefix.name.value)
     self.assertTrue(node.vars[1].exp_index.value.matches(
         lexer.TokNumber('7')))
     self.assertEqual('baz', node.vars[2].exp_prefix.name.value)
     self.assertEqual('bat', node.vars[2].attr_name.value)
Example #19
0
 def testPrefixExpChain(self):
     p = get_parser('(1+2)[foo].bar.baz')
     node = p._prefixexp()
     self.assertIsNotNone(node)
     self.assertEqual(12, p._pos)
     self.assertTrue(isinstance(node, parser.VarAttribute))
     self.assertEqual('baz', node.attr_name.value)
     self.assertTrue(isinstance(node.exp_prefix, parser.VarAttribute))
     self.assertEqual('bar', node.exp_prefix.attr_name.value)
     self.assertTrue(isinstance(node.exp_prefix.exp_prefix,
                                parser.VarIndex))
     self.assertEqual('foo',
                      node.exp_prefix.exp_prefix.exp_index.value.name.value)
     self.assertTrue(
         isinstance(node.exp_prefix.exp_prefix.exp_prefix, parser.ExpBinOp))
     self.assertTrue(
         node.exp_prefix.exp_prefix.exp_prefix.exp1.value.matches(
             lexer.TokNumber('1')))
     self.assertEqual('+',
                      node.exp_prefix.exp_prefix.exp_prefix.binop.value)
     self.assertTrue(
         node.exp_prefix.exp_prefix.exp_prefix.exp2.value.matches(
             lexer.TokNumber('2')))
Example #20
0
 def testNumberInteger(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'1234567890\n')
     self.assertEqual(2, len(lxr._tokens))
     self.assertEqual(lexer.TokNumber(b'1234567890'),
                      lxr._tokens[0])
Example #21
0
 def testNumberDecimalNoRightPart(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'1.\n')
     self.assertEqual(2, len(lxr._tokens))
     self.assertEqual(lexer.TokNumber(b'1.'),
                      lxr._tokens[0])
Example #22
0
 def testNumberDecimalWithExp(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'1.234567890e-6\n')
     self.assertEqual(2, len(lxr._tokens))
     self.assertEqual(lexer.TokNumber(b'1.234567890e-6'),
                      lxr._tokens[0])
Example #23
0
 def testExpValueNumber(self):
     p = get_parser('123.45')
     node = p._exp()
     self.assertIsNotNone(node)
     self.assertTrue(isinstance(node, parser.ExpValue))
     self.assertTrue(node.value.matches(lexer.TokNumber('123.45')))
Example #24
0
 def testNumberBinaryWithFrac(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'0b01101101.0011\n')
     self.assertEqual(2, len(lxr._tokens))
     self.assertEqual(lexer.TokNumber(b'0b01101101.0011'), lxr._tokens[0])
Example #25
0
 def testNumberHexWithFrac(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'0x1234567890abcdef.1bbf\n')
     self.assertEqual(2, len(lxr._tokens))
     self.assertEqual(lexer.TokNumber(b'0x1234567890abcdef.1bbf'),
                      lxr._tokens[0])