def test_execute_movement(self):
     state = RobotState(self.default_config())
     state.setup_pymunk_shapes(1)
     for arm in state.side_bar_sprites:
         arm.rotate_x = 0  # this is set in setup visuals
         arm.rotate_y = 0  # this is set in setup visuals
     state.execute_movement(5, 5)
     self.assertAlmostEqual(tuple(state.body.velocity)[0], 0.0,
                            3)  # no x movement
     self.assertAlmostEqual(tuple(state.body.velocity)[1], -5.0 * 30,
                            3)  # -150 y distance per second
     self.assertEqual(state.body.angle, pi)
    def test_setters_getters(self):
        state = RobotState(self.default_config())
        state.setup_pymunk_shapes(1)

        self.assertEqual(len(state.get_shapes()), 4 + 1 + 2 + 1)
        self.assertEqual(
            state.get_sensor((0, 'ev3-ports:in4')).get_ev3type(),
            'ultrasonic_sensor')
        self.assertEqual(state.get_bricks()[0].name, 'brick-left')
        self.assertEqual(len(state.get_sensors()), 1)
        self.assertEqual(state.get_anchor().name, 'brick-left')
        del state.bricks[0]
        self.assertEqual(state.get_anchor(), None)
Beispiel #3
0
 def test_get_value_and_locks(self):
     conf = TestRobotState.default_config()
     state = RobotState(conf)
     state.setup_pymunk_shapes(1)
     for arm in state.side_bar_sprites:
         arm.rotate_x = 0  # this is set in setup visuals
         arm.rotate_y = 0  # this is set in setup visuals
     sim = RobotSimulator(state)
     sim._sync_physics_sprites = MagicMock()
     val = sim.get_value((0, 'ev3-ports:in4'))
     self.assertEqual(val, 2550)
     self.assertEqual(sim.locks[(0, 'ev3-ports:in4')].locked(), True)
     sim.update()
     self.assertEqual(sim.locks[(0, 'ev3-ports:in4')].locked(), False)
    def test_reset(self):
        state = RobotState(self.default_config())
        state.setup_pymunk_shapes(1)
        for arm in state.side_bar_sprites:
            arm.rotate_x = 0  # this is set in setup visuals
            arm.rotate_y = 0  # this is set in setup visuals
        x = state.x * state.scale
        y = state.y * state.scale
        state.body.position = Vec2d(5, 5)  # 5 per sec
        state._move_position(Vec2d(5, 5))
        self.assertEqual(state.body.position, Vec2d(5, 5))
        self.assertEqual(state.body.velocity, Vec2d(5 * 30, 5 * 30))

        state.reset()

        self.assertEqual(state.body.position, Vec2d(x, y))
        self.assertEqual(state.body.velocity, Vec2d(0, 0))
Beispiel #5
0
    def test_constructor_and_reset(self):
        conf = TestRobotState.default_config()
        state = RobotState(conf)
        state.setup_pymunk_shapes(1)
        for arm in state.side_bar_sprites:
            arm.rotate_x = 0  # this is set in setup visuals
            arm.rotate_y = 0  # this is set in setup visuals
        sim = RobotSimulator(state)
        sim._sync_physics_sprites = MagicMock()
        sim.update()

        sim._sync_physics_sprites.assert_called_once()
        sim.should_reset = True
        self.assertEqual(sim.should_reset, True)
        sim.reset()
        self.assertEqual(sim.should_reset, False)
        sim.release_locks()
    def test_set_obstacles(self):
        config = self.default_config().copy()
        config['parts'].append({
            'name': 'color_test_sensor',
            'type': 'color_sensor',
            'x_offset': 0,
            'y_offset': 81,
            'brick': 0,
            'port': 'ev3-ports:in2'
        })

        config['parts'].append({
            'name': 'touch_test_sensor',
            'type': 'touch_sensor',
            'side': 'left',
            'x_offset': 0,
            'y_offset': -81,
            'brick': 0,
            'port': 'ev3-ports:in3'
        })
        state = RobotState(config)
        state.setup_pymunk_shapes(1)
        for arm in state.side_bar_sprites:
            arm.rotate_x = 0  # this is set in setup visuals

        color_obstacle_mock = MagicMock()
        rock_mock = MagicMock()
        lake_mock = MagicMock()

        state.set_color_obstacles([color_obstacle_mock])
        state.set_touch_obstacles([rock_mock])
        state.set_falling_obstacles([lake_mock])

        self.assertEqual(
            state.sensors[(0, 'ev3-ports:in3')].sensible_obstacles,
            [rock_mock])
        self.assertEqual(
            state.sensors[(0, 'ev3-ports:in2')].sensible_obstacles,
            [color_obstacle_mock])
        self.assertEqual(
            state.sensors[(0, 'ev3-ports:in4')].sensible_obstacles,
            [lake_mock])
        self.assertEqual(
            state.actuators[(0, 'ev3-ports:outA')].sensible_obstacles,
            [lake_mock])
    def test_setup_pymunk_shapes(self):
        state = RobotState(self.default_config())
        state.setup_pymunk_shapes(1)
        self.assertEqual(state.wheel_distance, 120)
        self.assertEqual(
            len(state.shapes), 4 + 1 + 2 +
            1)  # 4 sensors/actuators + 1 brick + 2 leds + 1 speaker
        self.assertEqual(state.body.angle, pi)

        config_with_one_wheel = self.default_config().copy()
        del config_with_one_wheel['parts'][1]
        config_with_one_wheel['parts'].append({
            'name':
            'invalid_sensor',
            'type':
            'type_that_does_not_exist',
        })
        state = RobotState(config_with_one_wheel)
        self.assertRaises(RuntimeError, state.setup_pymunk_shapes, 1)
    def test_arm_movement(self):
        config = self.default_config().copy()
        config['parts'].append({
            'name': 'measurement-probe',
            'type': 'arm',
            'x_offset': 15,
            'y_offset': 102,
            'brick': 0,
            'port': 'ev3-ports:outB'
        })

        with patch('ev3dev2simulator.robotpart.Arm.ArmLarge') as ArmLargeMock:
            arm_instance = ArmLargeMock.return_value
            state = RobotState(self.default_config())
            state.setup_pymunk_shapes(1)

            state.execute_arm_movement((0, 'ev3-ports:outB'), 15)
            state.actuators[(0, 'ev3-ports:outB')].side_bar_arm.degrees = 15

            self.assertEqual(len(arm_instance.mock_calls),
                             3)  # first two have to do with a sprite list
            fn_name, args, kwargs = arm_instance.mock_calls[2]
            self.assertEqual(fn_name, 'rotate')
            self.assertEqual(args, (15, ))