def test_orErrorTie(self): """ When branches of L{OMetaBase._or} produce errors that tie for rightmost position, they are merged. """ data = "foozle" o = OMetaBase(data) v, e = o._or([lambda: o.token("fog"), lambda: o.token("foz"), lambda: o.token("f")]) self.assertEqual(e[0], 2) self.assertEqual(e[1], [expected("token", "fog")[0], expected("token", "foz")[0]])
def test_orFalseSuccess(self): """ When a failing branch of L{OMetaBase._or} gets further than a succeeding one, its error is returned instead of the success branch's. """ data = "foozle" o = OMetaBase(data) v, e = o._or([lambda: o.token("fog"), lambda: o.token("foozik"), lambda: o.token("f")]) self.assertEqual(e[0], 4) self.assertEqual(e[1], expected("token", "foozik"))
def test_orSimpleFailure(self): """ When none of the alternatives passed to L{OMetaBase._or} succeed, the one that got the furthest is returned. """ data = "foozle" o = OMetaBase(data) e = self.assertRaises(ParseError, o._or, [lambda: o.token("fog"), lambda: o.token("foozik"), lambda: o.token("woozle")]) self.assertEqual(e[0], 4) self.assertEqual(e[1], expected("token", "foozik"))
def test_orSimpleFailure(self): """ When none of the alternatives passed to L{OMetaBase._or} succeed, the one that got the furthest is returned. """ data = "foozle" o = OMetaBase(data) e = self.assertRaises(ParseError, o._or, [ lambda: o.token("fog"), lambda: o.token("foozik"), lambda: o.token("woozle") ]) self.assertEqual(e[0], 4) self.assertEqual(e[1], expected("token", "foozik"))
def test_orSimpleFailure(self): """ When none of the alternatives passed to L{OMetaBase._or} succeed, the one that got the furthest is returned. """ data = "foozle" o = OMetaBase(data) try: o._or([lambda: o.token("fog"), lambda: o.token("foozik"), lambda: o.token("woozle")]) except _MaybeParseError as e: self.assertEqual(e[0], 4) self.assertEqual(e[1], expected("token", "foozik")) else: self.fail('_MaybeParseError not raised')