def test_sequence(self): x = t.Exactly("x") y = t.Exactly("y") z = t.And([x, y]) self.assertEqual(writeBytecode(z), [t.Match('x'), t.Match('y')])
def test_not(self): x = t.Not(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Choice(4), t.Match('x'), t.Commit(1), t.Fail()])
def test_optional(self): x = t.Optional(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Choice(3), t.Match('x'), t.Commit(2), t.Python("None")])
def test_many1(self): xs = t.Many1(t.Exactly("x")) self.assertEqual(writeBytecode(xs), [t.Match('x'), t.Choice(3), t.Match('x'), t.Commit(-2)])
def test_doubleOr(self): xy = t.Or([t.Exactly("x"), t.Exactly("y")]) self.assertEqual(writeBytecode(xy), [t.Choice(3), t.Match('x'), t.Commit(2), t.Match('y')])
def test_lookahead(self): x = t.Lookahead(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Choice(5), t.Choice(3), t.Match('x'), t.Commit(4), t.Fail()])
def test_superApply(self): one = t.Action("1") x = t.Action("x") a = t.Apply("super", "main", [one, x]) self.assertEqual(writeBytecode(a), [t.Python('1'), t.Push(), t.Python('x'), t.Push(), t.SuperCall('main')])
def test_foreignApply(self): one = t.Action("1") x = t.Action("x") a = t.ForeignApply("thegrammar", "foo", "main", [one, x]) self.assertEqual(writeBytecode(a), [t.Python('1'), t.Push(), t.Python('x'), t.Push(), t.ForeignCall('thegrammar', 'foo')])
def test_repeat(self): x = t.Repeat(3, 4, t.Exactly('x')) self.assertEqual(writeBytecode(x), [t.Python("3"), t.Push(), t.Python("4"), t.Push(), t.RepeatChoice(3), t.Match('x'), t.Commit(-2)])
def test_lookahead(self): x = t.Lookahead(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Choice(7), t.Choice(4), t.Match('x'), t.Commit(1), t.Fail(), t.Commit(1), t.Fail()])
def test_apply(self): one = t.Action("1") x = t.Action("x") a = t.Apply("foo", "main", [one, x]) self.assertEqual(writeBytecode(a), [t.Python('1'), t.Push(), t.Python('x'), t.Push(), t.Call('foo')])
def test_singleOr(self): x1 = t.Or([t.Exactly("x")]) x = t.Exactly("x") self.assertEqual(writeBytecode(x1), writeBytecode(x))
def test_or(self): xy = t.Or([t.Exactly("x"), t.Exactly("y")]) self.assertEqual(writeBytecode(xy), [t.Choice(3), t.Match("x"), t.Commit(4), t.Match("y")])
def test_many1(self): xs = t.Many1(t.Exactly("x")) self.assertEqual(writeBytecode(xs), [t.Match("x"), t.Choice(4), t.Match("x"), t.PartialCommit(1)])
def test_bind(self): x = t.Exactly("x") b = t.Bind("var", x) self.assertEqual(writeBytecode(b), [t.Match('x'), t.Bind('var')])
def test_bind_apply(self): x = t.Apply("members", "object", []) b = t.Bind("m", x) self.assertEqual(writeBytecode(b), [t.Call('members'), t.Bind('m')])
def test_exactly(self): x = t.Exactly("a") self.assertEqual(writeBytecode(x), [t.Match("a")])
def test_consumedby(self): x = t.ConsumedBy(t.Exactly('x')) self.assertEqual(writeBytecode(x), [t.StartSlice(), t.Match('x'), t.EndSlice()])
def test_pred(self): x = t.Predicate(t.Action("doStuff()")) self.assertEqual(writeBytecode(x), [t.Python('doStuff()'), t.Predicate()])
def test_listpattern(self): x = t.List(t.Exactly("x")) self.assertEqual( writeBytecode(x), [t.Descend(), t.Match('x'), t.Ascend()])
def test_optional(self): x = t.Optional(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Choice(3), t.Match("x"), t.Commit(4), t.Push(None)])
def test_pred(self): x = t.Predicate(t.Action("doStuff()")) self.assertEqual(writeBytecode(x), [t.Eval("doStuff()"), t.FailIfFalse()])
def test_not(self): x = t.Not(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Choice(3), t.Match("x"), t.FailTwice()])
def test_consumedby(self): x = t.ConsumedBy(t.Exactly('x')) self.assertEqual( writeBytecode(x), [t.StartSlice(), t.Match('x'), t.EndSlice()])
def test_bind(self): x = t.Exactly("x") b = t.Bind("var", x) self.assertEqual(writeBytecode(b), [t.Match("x"), t.Bind("var")])
def test_pred(self): x = t.Predicate(t.Action("doStuff()")) self.assertEqual( writeBytecode(x), [t.Python('doStuff()'), t.Predicate()])
def test_listpattern(self): x = t.List(t.Exactly("x")) self.assertEqual(writeBytecode(x), [t.Descend(2), t.Match("x")])