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)