#!/usr/bin/env python import logging import sys import unittest import numpy as np from api_client import APIconnection logging.basicConfig(stream=sys.stderr, level=logging.INFO) class TestCapture(unittest.TestCase): def test_capture_config(self): connection = APIconnection(host="localhost", port=5000, api_ver="v1") config = connection.get_config() expected_keys = ["image_resolution", "stream_resolution", "numpy_resolution"] for key in expected_keys: self.assertTrue(key in config) def test_capture_videoport(self): connection = APIconnection(host="localhost", port=5000, api_ver="v1") resolution = connection.get_config()["stream_resolution"] for resize in [None, (640, 480)]: if resize: resolution = resize capture_array = connection.capture( use_video_port=True, keep_on_disk=False, delete_after_use=True, resize=resize, ) self.assertTrue(capture_array.shape == (resolution[1], resolution[0], 3)) def test_capture_full(self): connection = APIconnection(host="localhost", port=5000, api_ver="v1") resolution = connection.get_config()["image_resolution"] for resize in [None, (640, 480)]: if resize: resolution = resize capture_array = connection.capture( use_video_port=False, keep_on_disk=False, delete_after_use=True, resize=resize, ) self.assertTrue(capture_array.shape == (resolution[1], resolution[0], 3)) class TestStage(unittest.TestCase): def test_stage_config(self): connection = APIconnection(host="localhost", port=5000, api_ver="v1") config = connection.get_config() expected_keys = ["backlash"] for key in expected_keys: self.assertTrue(key in config) def test_stage_state(self): connection = APIconnection(host="localhost", port=5000, api_ver="v1") state = connection.get_state() self.assertTrue("stage" in state) expected_keys = ["position"] for key in expected_keys: self.assertTrue(key in state["stage"]) def test_stage_movement(self): connection = APIconnection(host="localhost", port=5000, api_ver="v1") move_distance = 500 for axis in range(3): for direction in [1, -1]: pos_i_dict = connection.get_state()["stage"]["position"] pos_i = [pos_i_dict["x"], pos_i_dict["y"], pos_i_dict["z"]] move = [0, 0, 0] move[axis] = move_distance * direction connection.move_by(*move) pos_f_dict = connection.get_state()["stage"]["position"] pos_f = [pos_f_dict["x"], pos_f_dict["y"], pos_f_dict["z"]] diff = np.subtract(pos_f, pos_i) logging.debug("{} > {}".format(pos_i, pos_f)) self.assertTrue(np.array_equal(diff, move)) if __name__ == "__main__": suites = [ unittest.TestLoader().loadTestsFromTestCase(TestCapture), unittest.TestLoader().loadTestsFromTestCase(TestStage), ] alltests = unittest.TestSuite(suites) result = unittest.TextTestRunner(verbosity=2).run(alltests)