예제 #1
0
def test_point_parser_relative_points():
    """
    Test PointParser's parsing of relative points.
    """
    parser = PointParser()

    # Test invalid inputs
    invalid_inputs = [
        '-10 -20', '-10.-20', '+10', '+ 10,-20', '+10,- 20', '-10,', '+x,-20',
        '-10,+y', '-x,-y'
    ]
    for cli_input in invalid_inputs:
        result = parser.parse_point(cli_input)
        assert result == Failure("x,y or (+-)x,(+-)y", cli_input)

    # Test valid inputs
    valid_inputs = [
        ('-10,+20', RelativeParserPoint(-10, 20), ''),
        ('+10,+20 ', RelativeParserPoint(10, 20), ''),
        ('-10  ,-20', RelativeParserPoint(-10, -20), ''),
        ('+10,   -20', RelativeParserPoint(10, -20), ''),
        ('-10  ,  +20', RelativeParserPoint(-10, 20), ''),
        ('  +10  ,  -20', RelativeParserPoint(10, -20), ''),
        ('  +10  ,  -20   something', RelativeParserPoint(10,
                                                          -20), 'something'),
        ('+100,-250 something', RelativeParserPoint(100, -250), 'something'),
        ('-0,+0', RelativeParserPoint(0, 0), ''),
        ('+10,-20 30,40', RelativeParserPoint(10, -20), '30,40')
    ]
    for cli_input, expected, remainder in valid_inputs:
        result = parser.parse_point(cli_input)
        assert result == Success(expected, remainder)
예제 #2
0
def test_point_parser_absolute_points():
    """
    Test PointParser's parsing of absolute points.
    """
    parser = PointParser()

    # Test invalid inputs
    invalid_inputs = [
        '1020', '10 20', '10.20', '10', '10,', 'x,20', '10,y', 'x,y'
    ]
    for cli_input in invalid_inputs:
        result = parser.parse_point(cli_input)
        assert result == Failure("x,y or (+-)x,(+-)y", cli_input)

    # Test valid inputs
    valid_inputs = [
        ('10,20', AbsoluteParserPoint(10, 20), ''),
        ('10,20 ', AbsoluteParserPoint(10, 20), ''),
        ('10  ,20', AbsoluteParserPoint(10, 20), ''),
        ('10,   20', AbsoluteParserPoint(10, 20), ''),
        ('10  ,  20', AbsoluteParserPoint(10, 20), ''),
        ('  10  ,  20', AbsoluteParserPoint(10, 20), ''),
        ('  10  ,  20   something', AbsoluteParserPoint(10, 20), 'something'),
        ('100,250 something', AbsoluteParserPoint(100, 250), 'something'),
        ('0,0', AbsoluteParserPoint(0, 0), ''),
        ('10,20 30,40', AbsoluteParserPoint(10, 20), '30,40')
    ]
    for cli_input, expected, remainder in valid_inputs:
        result = parser.parse_point(cli_input)
        assert result == Success(expected, remainder)
예제 #3
0
    def parse_params(self, cli_input: str):
        if cli_input == '':
            # point parameter is absent, return ListShapeCommand with default values of parameters x and y
            return Success(ListShapeCommand(self._controller), '')

        result = PointParser.parse_point(cli_input)
        if result.is_successful():
            abs_point = self.convert_points([result.get_match()])

            x = abs_point[0].x
            y = abs_point[0].y
            return Success(ListShapeCommand(self._controller, x, y),
                           result.get_remainder())
        else:
            return result