summaryrefslogtreecommitdiffstatshomepage
path: root/regtests/unidasm/unidasm.py
diff options
context:
space:
mode:
Diffstat (limited to 'regtests/unidasm/unidasm.py')
-rw-r--r--regtests/unidasm/unidasm.py89
1 files changed, 0 insertions, 89 deletions
diff --git a/regtests/unidasm/unidasm.py b/regtests/unidasm/unidasm.py
deleted file mode 100644
index 7e9cbc58a76..00000000000
--- a/regtests/unidasm/unidasm.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/python
-##
-## license:BSD-3-Clause
-## copyright-holders:Angelo Salese
-##
-import os
-import sys
-import logging
-import subprocess
-from typing import Callable
-
-def __assert_valid_filename(filehandle: str, target_arch: str, expected_extension: str):
- """Checkout if derived file handle input is the expected one
-
- Args:
- filehandle (str): file handle
- target_arch (str): the expected architecture base name
- expected_extension (str): the expected extension that the file handle should have
- """
-
- assert filehandle.startswith(target_arch), f"{filehandle} {expected_extension} mismatch with arch {target_arch}"
- assert filehandle.endswith(expected_extension), f"{filehandle} mismatch {expected_extension}"
-
-def run_process():
- """Process our static directory, derive and execute tests
-
- For unidasm the strategy is to point at the static folder and
- derive unit tests based off what's in static directory itself.
- To compose a new test for a given arch:
-
- 1. craft a new binary file and save it in static subfolder, name it <test_arch>.bin,
- where <test_arch> is the name as it is displayed by running unidasm.exe
- with no additional params. Keep it simple & short, more sofisticated programs aren't really
- the scope of this (we're just testing if the arch disassembles here).
- 2. run unidasm $(thisfolder)/static/<test_arch>.bin -arch <test_arch> > $(thisfolder)/static/<test_arch>.asm
- On windows the resulting asm file newlines must be converted to LF with this.
- 3. now run make tests and check if the new test gets captured.
-
- """
- unidasm_exe = os.path.join(os.getcwd(), "unidasm{0}".format(".exe" if os.name == 'nt' else ""))
- static_tests_folder = os.path.join(os.path.dirname(os.path.realpath(__file__)), "static")
- static_tests = os.listdir(static_tests_folder)
-
- test_pool = {
- asm_filename.split(".")[0]: [asm_filename, bin_filename] for asm_filename, bin_filename in zip(static_tests[0::2], static_tests[1::2])
- }
-
- logging.info("Detected %s tests", len(test_pool))
-
- for target_arch, params in test_pool.items():
- assert len(params) == 2, f"{target_arch} Unexpected input test structure {params}"
- asm_filename, bin_filename = params
- __assert_valid_filename(asm_filename, target_arch, ".asm")
- __assert_valid_filename(bin_filename, target_arch, ".bin")
-
- logging.debug("Test arch %s passed internal validation, launching unidasm", target_arch)
-
- with open(os.path.join(static_tests_folder, asm_filename), "r", encoding="utf-8", newline="\n") as txt_h:
- expected_asm = txt_h.read()
-
- # TODO: checkout how unidasm copes with endianness on 16/32-bit based CPUs
- launch_process = subprocess.run(
- [unidasm_exe] + [os.path.join(static_tests_folder, bin_filename), "-arch", target_arch],
- encoding="utf-8",
- capture_output=True,
- check=True,
- text=True,
- shell=False
- )
- assert launch_process.returncode == 0, f"{target_arch} return code == {launch_process.returncode}"
- # TODO: eventually use difflib
- assert launch_process.stdout == expected_asm, "{1} expected:{0}{2}{0}actual:{0}{3}".format(
- os.linesep,
- target_arch,
- repr(expected_asm),
- repr(launch_process.stdout)
- )
- logging.info("Target arch test %s passed", target_arch)
-
-if __name__ == "__main__":
- logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
- try:
- run_process()
- except (subprocess.CalledProcessError, AssertionError) as ex:
- logging.error(str(ex))
- sys.exit(1)
- raise
- logging.info("unidasm test successful")
- sys.exit(0)