def test_when_scale_provided_gcode_command_called_with_scale(
         self, mock_GCodeCommandReader):
     mock_gcode_command_reader = mock_GCodeCommandReader.return_value
     mock_gcode_command_reader.to_command.return_value = [
         LateralDraw([0.0, 0.0], [0.0, 0.0], 100.0)
     ]
     gcode_line = "G01 X0.00 Y0.00 E1 F100.0\n"
     test_gcode = StringIO.StringIO(gcode_line)
     command_generator = GCodeToLayerGenerator(test_gcode, scale=0.1)
     mock_GCodeCommandReader.assert_called_with(scale=0.1)
    def test_get_layers_returns_a_single_layer(self, mock_GCodeCommandReader):
        mock_gcode_command_reader = mock_GCodeCommandReader.return_value
        mock_gcode_command_reader.to_command.return_value = [ LateralDraw([0.0,0.0],[0.0,0.0],100.0) ]
        gcode_line = "G01 X0.00 Y0.00 E1 F100.0\n"
        test_gcode = StringIO.StringIO(gcode_line)
        command_generator = GCodeToLayerGenerator(test_gcode)
        expected =  [ Layer(0.0, [ LateralDraw([0.0,0.0],[0.0,0.0],100.0) ]) ]

        actual = list(command_generator)

        self.assertLayersEquals(expected, actual)
    def test_get_layers_returns_a_single_layer_with_multipule_commands(self,mock_GCodeCommandReader):
        command1 = LateralDraw([0.0,0.0],[0.0,0.0],100.0)
        command2 = LateralDraw([0.0,0.0],[1.0,1.0],100.0)
        list_of_return_values= [ [command2], [command1] ]
        def side_effect(self):
            return list_of_return_values.pop()
        mock_gcode_command_reader = mock_GCodeCommandReader.return_value
        mock_gcode_command_reader.to_command.side_effect = side_effect

        gcode_line = "G01 X0.00 Y0.00 E1 F100.0\nG01 X0.00 Y0.00 E1 F100.0\n"
        test_gcode = StringIO.StringIO(gcode_line)
        layer_generator = GCodeToLayerGenerator(test_gcode)
        expected =  [ Layer(0.0, [ command1, command2 ]) ]

        actual = list(layer_generator)

        self.assertLayersEquals(expected, actual)
    def test_returns_multiple_layers_when_single_command_yields_multipule_lines(self,mock_GCodeCommandReader):
        command1 = LateralDraw([0.0,0.0],[0.0,0.0],100.0)
        command2 = VerticalMove(0.0,0.1,100.0)
        command3 = LateralDraw([0.0,0.0],[1.0,1.0],100.0)
        list_of_return_values = [ [command3], [command2], [command1] ]
        def side_effect(self):
            return list_of_return_values.pop()
        mock_gcode_command_reader = mock_GCodeCommandReader.return_value
        mock_gcode_command_reader.to_command.side_effect = side_effect

        gcode_line = "G01 X0.00 Y0.00 E1 F100.0\nG01 Z0.1 F100.0\nG01 X1.00 Y1.00 E1 F100.0"
        test_gcode = StringIO.StringIO(gcode_line)
        layer_generator = GCodeToLayerGenerator(test_gcode)
        expected =  [ Layer(0.0, [ command1 ]), Layer(0.1, [ command3 ]) ]

        actual = list(layer_generator)
        
        self.assertLayersEquals(expected, actual)
    def test_if_last_command_is_move_omited(self, mock_GCodeCommandReader):
        command1 = VerticalMove(0.0, 0.1, 100.0)
        command2 = LateralDraw([0.0, 0.0], [1.0, 1.0], 100.0)
        command3 = LateralDraw([1.0, 1.0], [0.5, 0.5], 100.0)
        command4 = LateralMove([0.5, 0.5], [1.0, 1.0], 100.0)
        list_of_return_values = [[command1, command2, command3, command4]]

        def side_effect(self):
            return list_of_return_values.pop()

        mock_gcode_command_reader = mock_GCodeCommandReader.return_value
        mock_gcode_command_reader.to_command.side_effect = side_effect

        gcode_line = "G01 Z0.1 F100.0\nG01 X1.00 Y1.00 E1 F100.0\nG01 X0.50 Y0.50 E1 F100.0\nG00 X1.00 Y1.00 E1 F100.0"
        test_gcode = StringIO.StringIO(gcode_line)
        layer_generator = GCodeToLayerGenerator(test_gcode)
        expected = [Layer(0.1, [command2, command3])]

        actual = list(layer_generator)

        self.assertLayersEquals(expected, actual)