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)
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)
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