def test_predSuccess(self): """ L{OMetaBase.pred} returns True and empty error info on success. """ o = OMetaBase("") v, e = o.pred(lambda: (True, _MaybeParseError(0, None))) self.assertEqual((v, e), (True, _MaybeParseError(0, None)))
def test_predFailure(self): """ L{OMetaBase.pred} returns True and empty error info on success. """ o = OMetaBase("") try: o.pred(lambda: (False, _MaybeParseError(0, None))) except _MaybeParseError as e: self.assertEqual(e, _MaybeParseError(0, None)) else: self.fail('_MaybeParseError not raised')
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_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'))))
def test_digit(self): """ L{OMetaBase.rule_digit} matches digits. """ o = OMetaBase("1a") v, e = o.rule_digit() self.assertEqual((v, e), ("1", [0, None])) try: o.rule_digit() except _MaybeParseError as e: self.assertEqual(e, _MaybeParseError(1, expected("digit"))) else: self.fail('_MaybeParseError not raised')
def test_letter(self): """ L{OMetaBase.rule_letter} matches letters. """ o = OMetaBase("a1") v, e = o.rule_letter() self.assertEqual((v, e), ("a", [0, None])) try: o.rule_letter() except _MaybeParseError as e: self.assertEqual(e, _MaybeParseError(1, expected("letter"))) else: self.fail('_MaybeParseError not raised')
def test_letterOrDigit(self): """ L{OMetaBase.rule_letterOrDigit} matches alphanumerics. """ o = OMetaBase("a1@") v, e = o.rule_letterOrDigit() self.assertEqual((v, e), ("a", [0, None])) v, e = o.rule_letterOrDigit() self.assertEqual((v, e), ("1", [1, None])) try: o.rule_letterOrDigit() except _MaybeParseError as e: self.assertEqual(e, _MaybeParseError(2, expected("letter or digit"))) else: self.fail('_MaybeParseError not raised')