Loading conftest.py 0 → 100644 +17 −0 Original line number Diff line number Diff line import pytest from emtest import EmTest @pytest.fixture(scope="session") def emtest_session() -> EmTest: emtest = EmTest() emtest.setup_class() yield emtest emtest.teardown_class() @pytest.fixture def emtest(emtest_session: EmTest) -> EmTest: emtest_session.reset_peripherals() return emtest_session emtest.py +1 −9 Original line number Diff line number Diff line Loading @@ -33,14 +33,6 @@ def setup_serial_contains(device_string: str): class EmTest: def setup_class(self): try: week_branch = self.week_branch except AttributeError: assert False try: replacements = self.replacements except AttributeError: replacements = [] try: generated_replacements = self.generated_replacements except AttributeError: Loading @@ -49,7 +41,7 @@ class EmTest: to_delete = self.to_delete except AttributeError: to_delete = [] self.session, self.file = loader.load_and_open_session(week_branch, replacements, generated_replacements, to_delete) self.session, self.file = loader.load_and_open_session(generated_replacements, to_delete) self.digilent_device = dwf.Dwf() self.leds = Leds(self.digilent_device) self.buttons = Buttons(self.digilent_device) Loading loader.py +9 −14 Original line number Diff line number Diff line Loading @@ -41,10 +41,7 @@ class EnvironmentVariableNotSet(BaseException): pass def copy_replacements(replacements: [str], filepath: str, generated_replacements: [(str, str)]): emtest_folder = get_emtest_folder() for replacement in replacements: shutil.copy2(f'{emtest_folder}/replacements/{replacement}', f'{filepath}/{replacement}') def copy_replacements(filepath: str, generated_replacements: [(str, str)]): for path, file_string in generated_replacements: with open(f'{filepath}/{path}', 'w') as file: file.write(file_string) Loading Loading @@ -87,7 +84,7 @@ def load_repository(week_branch: str): repo.git.checkout(week_branch) def prepare_build_files(replacements: [str], gen_replacements: [(str, str)], to_delete: [str]) -> str: def prepare_build_files(gen_replacements: [(str, str)], to_delete: [str]) -> str: emtest_folder = get_emtest_folder() repo_folder = get_repository_folder() folder_name = find_project_folder(repo_folder) Loading @@ -95,7 +92,7 @@ def prepare_build_files(replacements: [str], gen_replacements: [(str, str)], to_ print(f'{emtest_folder}, {repo_folder}, {folder_name}') raise FileNotFoundError copy_files(f'{emtest_folder}/build_files', f'{repo_folder}/{folder_name}/') copy_replacements(replacements, f'{repo_folder}/{folder_name}', gen_replacements) copy_replacements(f'{repo_folder}/{folder_name}', gen_replacements) delete_folders(to_delete, f'{repo_folder}/{folder_name}') return folder_name Loading @@ -111,9 +108,9 @@ def get_emtest_folder(): return os.getenv("EMTEST_FOLDER") def handle_session(replacements: [str], gen_replacements: [(str, str)], to_delete: [str]) -> (Session, io.BytesIO): def handle_session(gen_replacements: [(str, str)], to_delete: [str]) -> (Session, io.BytesIO): repo_folder = get_repository_folder() folder_name = prepare_build_files(replacements, gen_replacements, to_delete) folder_name = prepare_build_files(gen_replacements, to_delete) build_binary(repo_folder, folder_name) # Auto open does not work for some odd reason session = ConnectHelper.session_with_chosen_probe(return_first=True, auto_open=False) Loading @@ -124,17 +121,15 @@ def handle_session(replacements: [str], gen_replacements: [(str, str)], to_delet return session, open(f'{repo_folder}/{folder_name}/debug/StudentTest.elf', 'rb') def load_and_open_session(week_branch: str, replacements=None, gen_replacements=None, to_delete=None) -> (Session, io.BytesIO): if replacements is None: replacements = [] def load_and_open_session(gen_replacements=None, to_delete=None) -> (Session, io.BytesIO): if gen_replacements is None: gen_replacements = [] if to_delete is None: to_delete = [] load_dotenv() if os.getenv("CI") != "true": load_repository(week_branch) return handle_session(replacements, gen_replacements, to_delete) if len(os.getenv("OVERRIDE_BRANCH")) != 0: load_repository(os.getenv("OVERRIDE_BRANCH")) return handle_session(gen_replacements, to_delete) # ARMGCC_DIR=/home/vrbkam/Downloads/gcc-arm-none-eabi-10.3-2021.10/ ./build_debug_cpp.sh Loading weeks/test_adc.py +35 −37 Original line number Diff line number Diff line Loading @@ -11,43 +11,41 @@ def sin_waveform(samples: int = 32) -> [float]: return [math.cos((i / samples) * 2 * math.pi) * 0.5 + 0.5 for i in range(samples)] class TestADC(EmTest): def setup_class(self): self.week_branch = "Week_05" super().setup_class(self) def set_and_test_values(self, red: float, green: float): self.analog.output[0].set_value(green) self.analog.output[1].set_value(red) def _set_and_test_values(emtest: EmTest, red: float, green: float): emtest.analog.output[0].set_value(green) emtest.analog.output[1].set_value(red) time.sleep(0.2) assert self.leds.green() == pytest.approx(green, abs=0.25) assert self.leds.red() == pytest.approx(red, abs=0.25) assert emtest.leds.green() == pytest.approx(green, abs=0.25) assert emtest.leds.red() == pytest.approx(red, abs=0.25) def test_x_coordinate(self): def test_x_coordinate(emtest: EmTest): waveform = sin_waveform(32) self.analog.output[1].set_value(0) emtest.analog.output[1].set_value(0) for i in waveform: self.analog.output[0].set_value(i) emtest.analog.output[0].set_value(i) time.sleep(0.2) assert self.leds.green() == pytest.approx(i, abs=0.25) assert emtest.leds.green() == pytest.approx(i, abs=0.25) def test_y_coordinate(self): def test_y_coordinate(emtest: EmTest): waveform = sin_waveform(32) self.analog.output[0].set_value(0) emtest.analog.output[0].set_value(0) for i in waveform: self.analog.output[1].set_value(i) emtest.analog.output[1].set_value(i) time.sleep(0.2) assert self.leds.red() == pytest.approx(i, abs=0.25) assert emtest.leds.red() == pytest.approx(i, abs=0.25) def test_both_coordinates(self): def test_both_coordinates(emtest: EmTest): waveform = sin_waveform(64) for i in waveform: self.set_and_test_values(i, 1 - i) _set_and_test_values(emtest, i, 1 - i) def test_random_values(self): def test_random_values(emtest: EmTest): random.seed(42) for _ in range(64): green = random.uniform(0.0, 1.0) red = random.uniform(0.0, 1.0) self.set_and_test_values(red, green) _set_and_test_values(emtest, red, green) weeks/test_gpio.py +0 −2 Original line number Diff line number Diff line Loading @@ -36,8 +36,6 @@ class RGBStateMachine: class TestGPIO(EmTest): def setup_class(self): self.replacements = [] self.week_branch = "Week_02" super().setup_class(self) def led_switch(self, led_val: Callable): Loading Loading
conftest.py 0 → 100644 +17 −0 Original line number Diff line number Diff line import pytest from emtest import EmTest @pytest.fixture(scope="session") def emtest_session() -> EmTest: emtest = EmTest() emtest.setup_class() yield emtest emtest.teardown_class() @pytest.fixture def emtest(emtest_session: EmTest) -> EmTest: emtest_session.reset_peripherals() return emtest_session
emtest.py +1 −9 Original line number Diff line number Diff line Loading @@ -33,14 +33,6 @@ def setup_serial_contains(device_string: str): class EmTest: def setup_class(self): try: week_branch = self.week_branch except AttributeError: assert False try: replacements = self.replacements except AttributeError: replacements = [] try: generated_replacements = self.generated_replacements except AttributeError: Loading @@ -49,7 +41,7 @@ class EmTest: to_delete = self.to_delete except AttributeError: to_delete = [] self.session, self.file = loader.load_and_open_session(week_branch, replacements, generated_replacements, to_delete) self.session, self.file = loader.load_and_open_session(generated_replacements, to_delete) self.digilent_device = dwf.Dwf() self.leds = Leds(self.digilent_device) self.buttons = Buttons(self.digilent_device) Loading
loader.py +9 −14 Original line number Diff line number Diff line Loading @@ -41,10 +41,7 @@ class EnvironmentVariableNotSet(BaseException): pass def copy_replacements(replacements: [str], filepath: str, generated_replacements: [(str, str)]): emtest_folder = get_emtest_folder() for replacement in replacements: shutil.copy2(f'{emtest_folder}/replacements/{replacement}', f'{filepath}/{replacement}') def copy_replacements(filepath: str, generated_replacements: [(str, str)]): for path, file_string in generated_replacements: with open(f'{filepath}/{path}', 'w') as file: file.write(file_string) Loading Loading @@ -87,7 +84,7 @@ def load_repository(week_branch: str): repo.git.checkout(week_branch) def prepare_build_files(replacements: [str], gen_replacements: [(str, str)], to_delete: [str]) -> str: def prepare_build_files(gen_replacements: [(str, str)], to_delete: [str]) -> str: emtest_folder = get_emtest_folder() repo_folder = get_repository_folder() folder_name = find_project_folder(repo_folder) Loading @@ -95,7 +92,7 @@ def prepare_build_files(replacements: [str], gen_replacements: [(str, str)], to_ print(f'{emtest_folder}, {repo_folder}, {folder_name}') raise FileNotFoundError copy_files(f'{emtest_folder}/build_files', f'{repo_folder}/{folder_name}/') copy_replacements(replacements, f'{repo_folder}/{folder_name}', gen_replacements) copy_replacements(f'{repo_folder}/{folder_name}', gen_replacements) delete_folders(to_delete, f'{repo_folder}/{folder_name}') return folder_name Loading @@ -111,9 +108,9 @@ def get_emtest_folder(): return os.getenv("EMTEST_FOLDER") def handle_session(replacements: [str], gen_replacements: [(str, str)], to_delete: [str]) -> (Session, io.BytesIO): def handle_session(gen_replacements: [(str, str)], to_delete: [str]) -> (Session, io.BytesIO): repo_folder = get_repository_folder() folder_name = prepare_build_files(replacements, gen_replacements, to_delete) folder_name = prepare_build_files(gen_replacements, to_delete) build_binary(repo_folder, folder_name) # Auto open does not work for some odd reason session = ConnectHelper.session_with_chosen_probe(return_first=True, auto_open=False) Loading @@ -124,17 +121,15 @@ def handle_session(replacements: [str], gen_replacements: [(str, str)], to_delet return session, open(f'{repo_folder}/{folder_name}/debug/StudentTest.elf', 'rb') def load_and_open_session(week_branch: str, replacements=None, gen_replacements=None, to_delete=None) -> (Session, io.BytesIO): if replacements is None: replacements = [] def load_and_open_session(gen_replacements=None, to_delete=None) -> (Session, io.BytesIO): if gen_replacements is None: gen_replacements = [] if to_delete is None: to_delete = [] load_dotenv() if os.getenv("CI") != "true": load_repository(week_branch) return handle_session(replacements, gen_replacements, to_delete) if len(os.getenv("OVERRIDE_BRANCH")) != 0: load_repository(os.getenv("OVERRIDE_BRANCH")) return handle_session(gen_replacements, to_delete) # ARMGCC_DIR=/home/vrbkam/Downloads/gcc-arm-none-eabi-10.3-2021.10/ ./build_debug_cpp.sh Loading
weeks/test_adc.py +35 −37 Original line number Diff line number Diff line Loading @@ -11,43 +11,41 @@ def sin_waveform(samples: int = 32) -> [float]: return [math.cos((i / samples) * 2 * math.pi) * 0.5 + 0.5 for i in range(samples)] class TestADC(EmTest): def setup_class(self): self.week_branch = "Week_05" super().setup_class(self) def set_and_test_values(self, red: float, green: float): self.analog.output[0].set_value(green) self.analog.output[1].set_value(red) def _set_and_test_values(emtest: EmTest, red: float, green: float): emtest.analog.output[0].set_value(green) emtest.analog.output[1].set_value(red) time.sleep(0.2) assert self.leds.green() == pytest.approx(green, abs=0.25) assert self.leds.red() == pytest.approx(red, abs=0.25) assert emtest.leds.green() == pytest.approx(green, abs=0.25) assert emtest.leds.red() == pytest.approx(red, abs=0.25) def test_x_coordinate(self): def test_x_coordinate(emtest: EmTest): waveform = sin_waveform(32) self.analog.output[1].set_value(0) emtest.analog.output[1].set_value(0) for i in waveform: self.analog.output[0].set_value(i) emtest.analog.output[0].set_value(i) time.sleep(0.2) assert self.leds.green() == pytest.approx(i, abs=0.25) assert emtest.leds.green() == pytest.approx(i, abs=0.25) def test_y_coordinate(self): def test_y_coordinate(emtest: EmTest): waveform = sin_waveform(32) self.analog.output[0].set_value(0) emtest.analog.output[0].set_value(0) for i in waveform: self.analog.output[1].set_value(i) emtest.analog.output[1].set_value(i) time.sleep(0.2) assert self.leds.red() == pytest.approx(i, abs=0.25) assert emtest.leds.red() == pytest.approx(i, abs=0.25) def test_both_coordinates(self): def test_both_coordinates(emtest: EmTest): waveform = sin_waveform(64) for i in waveform: self.set_and_test_values(i, 1 - i) _set_and_test_values(emtest, i, 1 - i) def test_random_values(self): def test_random_values(emtest: EmTest): random.seed(42) for _ in range(64): green = random.uniform(0.0, 1.0) red = random.uniform(0.0, 1.0) self.set_and_test_values(red, green) _set_and_test_values(emtest, red, green)
weeks/test_gpio.py +0 −2 Original line number Diff line number Diff line Loading @@ -36,8 +36,6 @@ class RGBStateMachine: class TestGPIO(EmTest): def setup_class(self): self.replacements = [] self.week_branch = "Week_02" super().setup_class(self) def led_switch(self, led_val: Callable): Loading