示例#1
0
 def setUp(self) -> None:
     server_mock = Mock()
     attrs = {
         'type_object': 'Server',
         'external_handle_func': '',
     }
     server_mock.configure_mock(**attrs)
     self.atoms_logic = AtomsLogic(10, 10, server_mock)
示例#2
0
 def test_z_touch_surface_with_scan_mode(self):
     atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
     atom_logic.set_is_surface(True)
     assert atom_logic.is_scan_mode()
     assert atom_logic.is_surface()
     z = 70
     with self.assertRaises(TouchingSurface) as e:
         atom_logic.set_val_to_dto(DTO_Z, (1, 3, z))
     self.assertEqual("touching the surface", str(e.exception))
     assert atom_logic.tool_is_coming_down()
     self.assertNotEqual(atom_logic.get_dto_val(DTO_Z), z)
示例#3
0
 def setUp(self) -> None:
     self.atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
     self.atom_logic.set_is_surface(False)
     self.atom_logic.server.send_data_to_all_clients = MagicMock()
     assert self.atom_logic.is_scan_mode()
     assert not self.atom_logic.is_surface()
     self.atom_logic.set_is_atom(True)
     atom_coord = (1, 3, 40)
     self.atom_logic.set_val_to_dto(DTO_X, atom_coord)
     self.atom_logic.set_val_to_dto(DTO_Y, atom_coord)
     self.atom_logic.set_val_to_dto(DTO_Z, atom_coord)
     self.atom_logic.update_tool_coordinate()
示例#4
0
 def test_update_surface_with_scan_mode(self):
     atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
     atom_logic.set_is_surface(False)
     atom_logic.surface_data[3, 1] = 71
     z = 70
     atom_logic.set_val_to_dto(DTO_Z, (1, 3, z))
     assert atom_logic.tool_is_coming_down()
     self.assertEqual(z - CORRECTION_Z, atom_logic.surface_data[3, 1])
     self.assertEqual(z, atom_logic.get_dto_val(DTO_Z))
示例#5
0
 def test_invalid_dto(self):
     atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
     with self.assertRaises(ValueError) as e:
         atom_logic.set_val_to_dto("iny_dto", (1, 3, 1))
     self.assertEqual(INVALID_DTO, str(e.exception))
     with self.assertRaises(ValueError) as e:
         atom_logic.get_dto_val("iny_dto")
     self.assertEqual(INVALID_DTO, str(e.exception))
示例#6
0
 def test_z_not_touch_surface_with_scan_mode(self, ):
     atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
     atom_logic.set_is_surface(False)
     z = 70
     set_z_func = atom_logic.set_val_dto_curried(DTO_Z)
     set_z_func((1, 3, z))
     assert atom_logic.tool_is_coming_down()
     self.assertNotEqual(z - CORRECTION_Z, atom_logic.surface_data[3, 1])
     self.assertEqual(z, atom_logic.get_dto_val(DTO_Z))
     self.assertEqual({
         Dto.SENSOR: Dto.SERVO_Z,
         'value': str(z)
     }, atom_logic.dto_z.to_dict())
示例#7
0
class TestAtomCollection(TestCase):
    server_mock = None

    @classmethod
    def setUpClass(cls):
        cls.server_mock = Mock()
        attrs = {
            'type_object': 'Server',
            'external_handle_func': '',
        }
        cls.server_mock.configure_mock(**attrs)

    @classmethod
    def tearDownClass(cls):
        cls.server_mock = None

    def setUp(self) -> None:
        self.atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
        self.atom_logic.set_is_surface(False)
        self.atom_logic.server.send_data_to_all_clients = MagicMock()
        assert self.atom_logic.is_scan_mode()
        assert not self.atom_logic.is_surface()
        self.atom_logic.set_is_atom(True)
        atom_coord = (1, 3, 40)
        self.atom_logic.set_val_to_dto(DTO_X, atom_coord)
        self.atom_logic.set_val_to_dto(DTO_Y, atom_coord)
        self.atom_logic.set_val_to_dto(DTO_Z, atom_coord)
        self.atom_logic.update_tool_coordinate()

    def tearDown(self) -> None:
        self.atom_logic = None

    def test_append_unique_atom(self):
        self.assertEqual(0, len(self.atom_logic.atom_collection.atoms_list))

        is_append = self.atom_logic.atom_collection.append_unique_atom()
        self.assertTrue(is_append)
        self.assertEqual(1, len(self.atom_logic.atom_collection.atoms_list))

        is_append = self.atom_logic.atom_collection.append_unique_atom()
        self.assertFalse(is_append)
        self.assertEqual(1, len(self.atom_logic.atom_collection.atoms_list))

    def test_set_atom_captured(self):
        self.assertEqual(0, len(self.atom_logic.atom_collection.atoms_list))

        is_append = self.atom_logic.atom_collection.append_unique_atom()
        self.assertTrue(is_append)
        self.assertEqual(1, len(self.atom_logic.atom_collection.atoms_list))
        x, y, z = self.atom_logic.get_tool_coordinate()

        self.atom_logic.set_is_atom_captured(True)
        self.assertTrue(self.atom_logic.atom_captured_event)
        atom = self.atom_logic.atom_collection.atoms_list[0]
        self.assertTrue(atom.is_captured)
        self.assertTrue(self.atom_logic.is_atom_captured())
        self.assertEqual(atom.coordinates, (x, y, z))

        self.atom_logic.set_is_atom_captured(False)
        self.assertTrue(self.atom_logic.atom_release_event)
        atom = self.atom_logic.atom_collection.atoms_list[0]
        self.assertFalse(atom.is_captured)
        self.assertFalse(self.atom_logic.is_atom_captured())
        self.assertEqual(atom.coordinates, (x, y, z))

        self.atom_logic.set_val_to_dto(DTO_Z, (x, y, z + 1))
        self.atom_logic.update_tool_coordinate()
        self.atom_logic.set_is_atom_captured(True)
        self.assertTrue(self.atom_logic.atom_captured_event)
        atom = self.atom_logic.atom_collection.atoms_list[0]
        self.assertTrue(atom.is_captured)
        self.assertTrue(self.atom_logic.is_atom_captured())
        self.assertEqual(atom.coordinates, (x, y, z))

        self.atom_logic.set_is_atom_captured(False)
        self.assertTrue(self.atom_logic.atom_release_event)
        atom = self.atom_logic.atom_collection.atoms_list[0]
        self.assertFalse(atom.is_captured)
        self.assertFalse(self.atom_logic.is_atom_captured())
        self.assertEqual(atom.coordinates, (x, y, z + 1))

        self.assertEqual(len(self.atom_logic.atom_collection.atoms_list), 1)
示例#8
0
class TestGraphWithRealAtomLogic(TestCase):
    def setUp(self) -> None:
        server_mock = Mock()
        attrs = {
            'type_object': 'Server',
            'external_handle_func': '',
        }
        server_mock.configure_mock(**attrs)
        self.atoms_logic = AtomsLogic(10, 10, server_mock)

    def tearDown(self) -> None:
        self.atoms_logic = None

    def test_update_graph_data_algorithm(self):
        self.atoms_logic.atom_release_event = True
        self.atoms_logic.atom_captured_event = True
        self.atoms_logic.set_is_atom(True)
        self.atoms_logic.set_is_surface(True)
        graph = self.__get_graph_obj()
        graph.update_graph_data_algorithm()

        calls = [
            call(*(0, 0, 0), s=5, c=COLOR_ATOM, marker='8'),
            call(*self.atoms_logic.get_tool_coordinate(),
                 s=5,
                 c=COLOR_TIP,
                 marker='8'),
            call(*self.atoms_logic.get_tool_coordinate(),
                 s=5,
                 c=COLOR_ATOM,
                 marker='8'),
            call(*self.atoms_logic.get_tool_coordinate(),
                 s=5,
                 c=COLOR_TIP,
                 marker='8'),
            call(*self.atoms_logic.get_tool_coordinate(),
                 s=5,
                 c=COLOR_ATOM,
                 marker='8'),
        ]
        self.atoms_logic.server.send_data_to_all_clients.assert_called_once_with(
            '{"sensor": "servo_z", "value": "0"}')
        graph.ax.scatter.assert_has_calls(calls, any_order=False)
        self.assertFalse(self.atoms_logic.atom_release_event)
        self.assertFalse(self.atoms_logic.atom_captured_event)
        self.assertEqual(1, len(self.atoms_logic.atom_collection.atoms_list))
        self.assertFalse(self.atoms_logic.is_atom())
        self.assertFalse(self.atoms_logic.is_atom())

    def test_update_graph_another_data_algorithm(self):
        self.atoms_logic.atom_release_event = True
        self.atoms_logic.atom_captured_event = True
        self.atoms_logic.set_is_surface(True)
        self.atoms_logic.set_is_atom(False)
        graph = self.__get_graph_obj()
        graph.update_graph_data_algorithm()

        calls = [
            call(*(0, 0, 0), s=5, c=COLOR_ATOM, marker='8'),
            call(*self.atoms_logic.get_tool_coordinate(),
                 s=5,
                 c=COLOR_TIP,
                 marker='8'),
            call(*self.atoms_logic.get_tool_coordinate(),
                 s=5,
                 c=COLOR_TIP,
                 marker='8'),
        ]
        graph.ax.scatter.assert_has_calls(calls, any_order=False)

        self.atoms_logic.server.send_data_to_all_clients.assert_called_once_with(
            '{"sensor": "servo_z", "value": "0"}')

        self.assertEqual(0, len(self.atoms_logic.atom_collection.atoms_list))
        self.assertFalse(self.atoms_logic.atom_release_event)
        self.assertFalse(self.atoms_logic.atom_captured_event)
        self.assertFalse(self.atoms_logic.is_atom())
        self.assertFalse(self.atoms_logic.is_atom())

    def __get_graph_obj(self):
        ax = Mock()
        ax.scatter = MagicMock()
        graph = FakeGraphFrame(self.atoms_logic, ax)
        ax.plot_surface = MagicMock(return_value=graph.surface)
        return graph
示例#9
0
    def test_x_touch_side_surface_with_scan_mode(self):
        atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
        atom_logic.set_is_surface(False)
        atom_logic.server.send_data_to_all_clients = MagicMock()
        assert atom_logic.is_scan_mode()
        assert not atom_logic.is_surface()
        x = 1
        y = 3
        z = 40
        atom_logic.surface_data[y, x] = 50
        atom_logic.set_val_to_dto(DTO_Z, (0, 0, z))

        atom_logic.update_tool_coordinate()
        tool_x, tool_y, tool_z = atom_logic.get_tool_coordinate()
        self.assertNotEqual(x, tool_x)
        self.assertEqual(z, tool_z)
        self.assertNotEqual(y, tool_y)
        atom_logic.server. \
            send_data_to_all_clients. \
            assert_called_once_with(f'{{"sensor": "servo_z", "value": "{str(MAX - z)}"}}')

        atom_logic.set_val_to_dto(DTO_Y, (0, y, z))
        assert not atom_logic.tool_is_coming_down()

        with self.assertRaises(TouchingSurface) as e:
            atom_logic.set_val_to_dto(DTO_X, (x, y, z))
        self.assertEqual("touching the surface", str(e.exception))
        assert not atom_logic.tool_is_coming_down()
        self.assertNotEqual(atom_logic.get_dto_val(DTO_X), x)

        atom_logic.update_tool_coordinate()
        tool_x, tool_y, tool_z = atom_logic.get_tool_coordinate()
        self.assertNotEqual(x, tool_x)
        self.assertEqual(z, tool_z)
        self.assertEqual(y, tool_y)
        atom_logic.server. \
            send_data_to_all_clients. \
            assert_called_with(json.dumps(atom_logic.dto_y.to_dict()))
 def test_handle_surface_data(self):
     for data, validated in self.surface_data:
         atom_logic = AtomsLogic(10, 10, self.__class__.server_mock)
         z = 70
         self.__set_tool_is_coming_down(atom_logic, z)
         atom_logic.set_is_surface(False)
         if validated == 'valid':
             atom_logic.handle_server_data(data)
             self.assertTrue(atom_logic.is_surface())
             self.assertEqual(z - CORRECTION_Z, atom_logic.surface_data[0,
                                                                        0])
         else:
             atom_logic.handle_server_data(data)
             self.assertFalse(atom_logic.is_surface())
             self.assertNotEqual(z - CORRECTION_Z,
                                 atom_logic.surface_data[0, 0])
         self.assertFalse(atom_logic.is_atom())