def test_AddingLabel(self): # Arrange parser1 = bpr.LParser('l') parser2 = bpr.LParser('o') parser3 = bpr.LParser('r') parser = cmb.opt(parser1, parser2, parser3, label='Parser: lor') parser_default_label = cmb.opt(parser1, parser2, parser3) # Assert self.assertEqual(parser.label, 'Parser: lor') self.assertEqual(parser_default_label.label, '(lor)?')
def parse_float(label='FLOAT'): """ returns parser for floating point number """ sign = cmb.opt(bp.LParser('-')) coma = bp.LParser('.') e = cmb.or_else(bp.LParser('e'), bp.LParser('E')) exponent = cmb.opt(cmb.and_then(e, parse_integer())) integer = parse_integer() return cmb.and_then(sign, cmb.opt(integer), coma, parse_digits(), exponent, label=label)
def test_Failure(self): # Arrange txt = '112345' parser = bpr.LParser('1') # Act parser = cmb.opt(parser) result = parser(txt) expected = res.Failure('error') # Assert self.assertEqual(result, expected)
def test_SuccessCase(self): # Arrange txt1 = '2345' txt2 = '12345' parser = bpr.LParser('1') # Act parser = cmb.opt(parser) result1 = parser(txt1) result2 = parser(txt2) expected1 = res.Success(('', '2345')) expected2 = res.Success(('1', '2345')) # Assert self.assertEqual(result1, expected1) self.assertEqual(result2, expected2)
def test_CorrectlyHandlesDifferentNumberOfArguments_Failure(self): # Arrange txt1 = '11789' txt2 = '123789' parser_1 = bpr.LParser('1') parser_2 = bpr.LParser('2') parser_3 = bpr.LParser('3') parser_4 = bpr.LParser('4') # Act parser = cmb.opt(parser_1, parser_2, parser_3, parser_4) result1 = parser(txt1) result2 = parser(txt2) expected1 = res.Failure('error') expected2 = res.Failure('error') # Assert self.assertEqual(result1, expected1) self.assertEqual(result2, expected2)
def test_CorrectlyHandlesDifferentNumberOfArguments_Success(self): # Arrange txt1 = '1789' txt2 = '789' parser_1 = bpr.LParser('1') parser_2 = bpr.LParser('2') parser_3 = bpr.LParser('3') parser_4 = bpr.LParser('4') # Act parser = cmb.opt(parser_1, parser_2, parser_3, parser_4) result1 = parser(txt1) result2 = parser(txt2) expected1 = res.Success(('1', '789')) expected2 = res.Success(('', '789')) # Assert self.assertEqual(result1, expected1) self.assertEqual(result2, expected2)
def parse_integer(label='INTEGER'): """ returns parser for integer """ sign = cmb.opt(bp.LParser('-')) return cmb.and_then(sign, parse_unsignedinteger(), label=label)