aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/test_directory.py
diff options
context:
space:
mode:
authorMatthew Poletiek <matthew.poletiek@gmail.com>2020-12-08 21:03:16 -0600
committerMatthew Poletiek <matthew.poletiek@gmail.com>2020-12-08 21:03:16 -0600
commite99416456afd4aa8bde42016826f9a345291cbf3 (patch)
treea7a95639cd1cb5dbe2d91a2ca8e8defafac4296d /tests/unit/test_directory.py
parent194cf4e5e0b6a2811103a9b739a72b9afe2b886c (diff)
downloadchirp-e99416456afd4aa8bde42016826f9a345291cbf3.tar.gz
chirp-e99416456afd4aa8bde42016826f9a345291cbf3.tar.xz
Initial Commit
Diffstat (limited to 'tests/unit/test_directory.py')
-rw-r--r--tests/unit/test_directory.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/unit/test_directory.py b/tests/unit/test_directory.py
new file mode 100644
index 0000000..d48bb48
--- /dev/null
+++ b/tests/unit/test_directory.py
@@ -0,0 +1,69 @@
+import base64
+import json
+import tempfile
+
+from tests.unit import base
+from chirp import chirp_common
+from chirp import directory
+
+
+class TestDirectory(base.BaseTest):
+ def setUp(self):
+ super(TestDirectory, self).setUp()
+
+ directory.enable_reregistrations()
+
+ class FakeAlias(chirp_common.Alias):
+ VENDOR = 'Taylor'
+ MODEL = 'Barmaster 2000'
+ VARIANT = 'A'
+
+ @directory.register
+ class FakeRadio(chirp_common.FileBackedRadio):
+ VENDOR = 'Dan'
+ MODEL = 'Foomaster 9000'
+ VARIANT = 'R'
+ ALIASES = [FakeAlias]
+
+ @classmethod
+ def match_model(cls, file_data, image_file):
+ return file_data == b'thisisrawdata'
+
+ self.test_class = FakeRadio
+
+ def _test_detect_finds_our_class(self, tempfn):
+ radio = directory.get_radio_by_image(tempfn)
+ self.assertTrue(isinstance(radio, self.test_class))
+ return radio
+
+ def test_detect_with_no_metadata(self):
+ with tempfile.NamedTemporaryFile() as f:
+ f.write(b'thisisrawdata')
+ f.flush()
+ self._test_detect_finds_our_class(f.name)
+
+ def test_detect_with_metadata_base_class(self):
+ with tempfile.NamedTemporaryFile() as f:
+ f.write(b'thisisrawdata')
+ f.write(self.test_class.MAGIC + b'-')
+ f.write(self.test_class._make_metadata())
+ f.flush()
+ self._test_detect_finds_our_class(f.name)
+
+ def test_detect_with_metadata_alias_class(self):
+ with tempfile.NamedTemporaryFile() as f:
+ f.write(b'thisisrawdata')
+ f.write(self.test_class.MAGIC + b'-')
+ FakeAlias = self.test_class.ALIASES[0]
+ fake_metadata = base64.b64encode(json.dumps(
+ {'vendor': FakeAlias.VENDOR,
+ 'model': FakeAlias.MODEL,
+ 'variant': FakeAlias.VARIANT,
+ }).encode())
+ f.write(fake_metadata)
+ f.flush()
+ radio = self._test_detect_finds_our_class(f.name)
+ self.assertEqual('Taylor', radio.VENDOR)
+ self.assertEqual('Barmaster 2000', radio.MODEL)
+ self.assertEqual('A', radio.VARIANT)
+