def test_end(self): """ L{OMetaBase.rule_end} matches the end of input and raises L{ParseError} if input is left. """ o = OMetaBase("abc") e = self.assertRaises(ParseError, o.rule_end) self.assertEqual(e, ParseError(1, None)) o.many(o.rule_anything) self.assertEqual(o.rule_end(), (True, [3, None]))
def test_end(self): """ L{OMetaBase.rule_end} matches the end of input and raises L{_MaybeParseError} if input is left. """ o = OMetaBase("abc") try: o.rule_end() except _MaybeParseError as e: self.assertEqual(e, _MaybeParseError(1, None)) else: self.fail('_MaybeParseError not raised') o.many(o.rule_anything) self.assertEqual(o.rule_end(), (True, _MaybeParseError(3, None)))
def test_consumed_by(self): """ L{OMetaBase.consumed_by} return the full matched string, not each matched parts """ o = OMetaBase("aax") v, e = o.consumed_by(lambda: o.many(lambda: o.exactly("a"))) self.assertEqual((v, e), ("aa", _MaybeParseError(2, [('expected', None, 'a')])))
def test_many(self): """ L{OMetaBase.many} returns a list of parsed values and the error that caused the end of the loop. """ data = "ooops" o = OMetaBase(data) self.assertEqual(o.many(lambda: o.rule_exactly('o')), (['o'] * 3, ParseError(3, expected(None, 'o'))))
def test_many(self): """ L{OMetaBase.many} returns a list of parsed values and the error that caused the end of the loop. """ data = "ooops" o = OMetaBase(data) self.assertEqual(o.many(lambda: o.rule_exactly('o')), (['o'] * 3, _MaybeParseError(3, expected(None, 'o'))))