def test_CorrectlyHandlesDifferentNumberOfArguments(self): # Arrange txt = 'aabbacccadd1234' parser_a = bpr.LParser('a') parser_b = bpr.LParser('b') parser_c = bpr.LParser('c') parser_d = bpr.LParser('d') # Act parser1 = cmb.many1(parser_a) parser2 = cmb.many1(parser_a, parser_b) parser3 = cmb.many1(parser_a, parser_b, parser_c) parser4 = cmb.many1(parser_a, parser_b, parser_c, parser_d) result1 = parser1(txt) result2 = parser2(txt) result3 = parser3(txt) result4 = parser4(txt) expected1 = res.Success(('aa', 'bbacccadd1234')) expected2 = res.Success(('aabba', 'cccadd1234')) expected3 = res.Success(('aabbaccca', 'dd1234')) expected4 = res.Success(('aabbacccadd', '1234')) # Assert self.assertEqual(result1, expected1) self.assertEqual(result2, expected2) self.assertEqual(result3, expected3) self.assertEqual(result4, expected4)
def test_AddingLabel(self): # Arrange parser1 = bpr.LParser('l') parser2 = bpr.LParser('o') parser3 = bpr.LParser('r') parser = cmb.many1(parser1, parser2, parser3, label='Parser: lor') parser_default_label = cmb.many1(parser1, parser2, parser3) # Assert self.assertEqual(parser.label, 'Parser: lor') self.assertEqual(parser_default_label.label, '(lor)+')
def test_Failure(self): # Arrange txt = 'aabbaccca1234' parser1 = bpr.LParser('x') parser2 = bpr.LParser('y') # Act parser = cmb.many1(parser1, parser2) result = parser(txt) expected = res.Failure('error') # Assert self.assertEqual(result, expected)
def test_SuccessCase(self): # Arrange txt = 'aabbaccca1234' parser1 = bpr.LParser('a') parser2 = bpr.LParser('b') parser3 = bpr.LParser('c') # Act parser = cmb.many1(parser1, parser2, parser3) result = parser(txt) expected = res.Success(('aabbaccca', '1234')) # Assert self.assertEqual(result, expected)
def test_ParserParseEverything_ReturnsSuccess(self): # Arrange txt = 'aabbaccca' parser_a = bpr.LParser('a') parser_b = bpr.LParser('b') parser_c = bpr.LParser('c') parser_d = bpr.LParser('d') # Act parser = cmb.many1(parser_a, parser_b, parser_c, parser_d) result = parser(txt) expected = res.Success(('aabbaccca', '')) # Assert self.assertEqual(result, expected)
def parse_alphanumerics(label='[A-Za-z0-9]+'): """ returns parser parsing at least one letter or digit: [A-Za-z0-9]+ """ return cmb.many1(*[bp.LParser(char) for char in (string.ascii_letters + string.digits)], label=label)
def parse_letters(label='[A-Za-z]+'): """ returns parser parsing at least one latter: [A-Za-z]+ """ return cmb.many1(*[bp.LParser(char) for char in string.ascii_letters], label=label)
def parse_lowercases(label='[a-z]+'): """ returns parser parsing at least one small latter: [a-z]+ """ return cmb.many1(*[bp.LParser(char) for char in string.ascii_lowercase], label=label)
def parse_uppercases(label='[A-Z]+'): """ returns parser parsing at least one capital letter: [A-Z]+ """ return cmb.many1(*[bp.LParser(char) for char in string.ascii_uppercase], label=label)
def parse_digits(label='[0-9]+'): """ returns parser parsing at least one digit: [0-9]+ """ return cmb.many1(*[bp.LParser(char) for char in string.digits], label=label)
def parse_word(label='[A-Za-z0-9_]+'): """ returns parser parsing at least one letter or digit or underscore: [A-Za-z0-9_]+ """ return cmb.many1(*[bp.LParser(char) for char in (string.ascii_letters + string.digits + '_')], label=label)
def test_WhenNoParserGivenRaisesException(self): with self.assertRaises(Exception) as context: cmb.many1() # Assert self.assertEqual('Expected parser', str(context.exception))