aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJuan J. Martínez <jjm@usebox.net>2021-10-02 12:33:04 +0000
committerJuan J. Martínez <jjm@usebox.net>2021-10-02 12:33:04 +0000
commitcaa22e5bbd158fd8d563588293aa763ca5801bed (patch)
tree0789e731afeb7844fd68976fc0b1ea53ec4517d7 /tests
parentc14900274f20d119c6704f910eec420bf2998866 (diff)
downloadubox-msx-lib-caa22e5bbd158fd8d563588293aa763ca5801bed.tar.gz
ubox-msx-lib-caa22e5bbd158fd8d563588293aa763ca5801bed.zip
Start the test suite
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile10
-rw-r--r--tests/README.md14
-rwxr-xr-xtests/test_rom.py37
3 files changed, 61 insertions, 0 deletions
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644
index 0000000..6c1a9a4
--- /dev/null
+++ b/tests/Makefile
@@ -0,0 +1,10 @@
+default:
+ $(error Please use the Makefile from root directory)
+
+TESTS := $(wildcard test_*.py)
+
+test:
+ python3 -m unittest $(TESTS)
+
+.PHONY: test default
+
diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 0000000..c0139a8
--- /dev/null
+++ b/tests/README.md
@@ -0,0 +1,14 @@
+# ubox MSX lib test suite
+
+The tests are written in python 3 and follow this convention:
+
+| Test class | Filename |
+| --- | --- |
+| TestMyCase | test_my_case.py |
+
+See `test_rom.py` as an example.
+
+Remember to make the test file executable!
+
+**TODO**: add a module to support openMSX remote control.
+
diff --git a/tests/test_rom.py b/tests/test_rom.py
new file mode 100755
index 0000000..7ba6992
--- /dev/null
+++ b/tests/test_rom.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+
+import unittest
+import struct
+
+
+class TestRom(unittest.TestCase):
+ """Test that the generated game ROM is correct."""
+
+ ROM_SIZE = 0x8000
+
+ @classmethod
+ def setUpClass(cls):
+ with open("../bin/game.rom", "rb") as fd:
+ cls.data = fd.read(cls.ROM_SIZE)
+
+ with open("../game/build/game.map", "rb") as fd:
+ game_map = fd.readlines()
+
+ cls.main_init = 0
+ for line in game_map:
+ if b"_main_init" in line:
+ cls.main_init = int(line.split()[0], 16)
+ break
+
+ def test_header_magic(self):
+ self.assertEqual(self.data[:2], b"AB")
+
+ def test_size(self):
+ self.assertEqual(len(self.data), self.ROM_SIZE)
+
+ def test_header_main_init_address(self):
+ self.assertEqual(struct.unpack("H", self.data[2:4]), (self.main_init,))
+
+
+if __name__ == '__main__':
+ unittest.main()