amaranth/tests/test_build_plat.py
whitequark 67b957d4f4 tests: move out of the main package.
Compared to tests in the repository root, tests in the package have
many downsides:
  * Unless explicitly excluded in find_packages(), tests and their
    support code effectively become a part of public API.
    This, unfortunately, happened with FHDLTestCase, which was never
    intended for downstream use.
  * Even if explicitly excluded from the setuptools package, using
    an editable install, or setting PYTHONPATH still allows accessing
    the tests.
  * Having a sub-package that is present in the source tree but not
    exported (or, worse, exported only sometimes) is confusing.
  * The name `nmigen.test` cannot be used for anything else, such as
    testing utilities that *are* intended for downstream use.
2020-08-27 00:33:31 +00:00

54 lines
1.6 KiB
Python

from nmigen import *
from nmigen.build.plat import *
from .utils import *
class MockPlatform(Platform):
resources = []
connectors = []
required_tools = []
def toolchain_prepare(self, fragment, name, **kwargs):
raise NotImplementedError
class PlatformTestCase(FHDLTestCase):
def setUp(self):
self.platform = MockPlatform()
def test_add_file_str(self):
self.platform.add_file("x.txt", "foo")
self.assertEqual(self.platform.extra_files["x.txt"], "foo")
def test_add_file_bytes(self):
self.platform.add_file("x.txt", b"foo")
self.assertEqual(self.platform.extra_files["x.txt"], b"foo")
def test_add_file_exact_duplicate(self):
self.platform.add_file("x.txt", b"foo")
self.platform.add_file("x.txt", b"foo")
def test_add_file_io(self):
with open(__file__) as f:
self.platform.add_file("x.txt", f)
with open(__file__) as f:
self.assertEqual(self.platform.extra_files["x.txt"], f.read())
def test_add_file_wrong_filename(self):
with self.assertRaisesRegex(TypeError,
r"^File name must be a string, not 1$"):
self.platform.add_file(1, "")
def test_add_file_wrong_contents(self):
with self.assertRaisesRegex(TypeError,
r"^File contents must be str, bytes, or a file-like object, not 1$"):
self.platform.add_file("foo", 1)
def test_add_file_wrong_duplicate(self):
self.platform.add_file("foo", "")
with self.assertRaisesRegex(ValueError,
r"^File 'foo' already exists$"):
self.platform.add_file("foo", "bar")