1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import logging
- from unittest import TestCase, TestSuite, TextTestRunner
- from csv import reader
- from os import environ, path
- from tests import TEST_DATA_DIR, reload_tables
- from scriptshifter.trans import transliterate
- import scriptshifter.tables
- logger = logging.getLogger(__name__)
- class TestTrans(TestCase):
- """
- Test S2R transliteration.
- Modified test case class to run independent tests for each CSV row.
- TODO use a comprehensive sample table and report errors for unsupported
- languages.
- """
- def sample_s2r(self):
- """
- Test S2R transliteration for one CSV sample.
- This function name won't start with `test_` otherwise will be
- automatically run without parameters.
- """
- config = scriptshifter.tables.load_table(self.tbl)
- if "script_to_roman" in config:
- txl = transliterate(self.script, self.tbl)
- self.assertEqual(
- txl, self.roman,
- f"S2R transliteration error for {self.tbl}!")
- def sample_r2s(self):
- """
- Test R2S transliteration for one CSV sample.
- This function name won't start with `test_` otherwise will be
- automatically run without parameters.
- """
- config = scriptshifter.tables.load_table(self.tbl)
- if "roman_to_script" in config:
- txl = transliterate(self.roman, self.tbl, r2s=True)
- self.assertEqual(
- txl, self.script,
- f"R2S transliteration error for {self.tbl}!")
- def make_suite():
- """
- Build parametrized test cases.
- """
- if "TXL_CONFIG_TABLE_DIR" in environ:
- del environ["TXL_CONFIG_TABLE_DIR"]
- reload_tables()
- suite = TestSuite()
- with open(
- path.join(TEST_DATA_DIR, "sample_strings.csv"),
- newline="") as fh:
- csv = reader(fh)
- csv.__next__() # Discard header row.
- for row in csv:
- if len(row[2]):
- # Inject transliteration info in the test case.
- for tname in ("sample_s2r", "sample_r2s"):
- tcase = TestTrans(tname)
- tcase.tbl = row[2]
- tcase.script = row[3]
- tcase.roman = row[4]
- suite.addTest(tcase)
- return suite
- TextTestRunner().run(make_suite())
|