from unittest import TestCase from os import environ import scriptshifter from tests import TEST_DATA_DIR, reload_tables class TestConfig(TestCase): """ Test configuration parsing. """ def setUp(self): environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR self.tables = reload_tables() def test_ordering(self): tbl = self.tables.load_table("ordering") exp_order = ["ABCD", "AB", "A", "BCDE", "BCD", "BEFGH", "B"] self.assertEqual( [s[0] for s in tbl["roman_to_script"]["map"]], exp_order) class TestOverride(TestCase): """ Test configuration overrides. """ def setUp(self): environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR self.tables = reload_tables() def test_override_map(self): tbl = self.tables.load_table("inherited") self.assertEqual(tbl["general"]["name"], "Test inheritance leaf file") # Entries are additive. self.assertEqual( tbl["roman_to_script"]["ignore"], ["Fritter my wig", "Hi", "Ho", "Thing-um-a-jig"]) self.assertEqual( tbl["roman_to_script"]["map"], ( ("A", "a"), ("B", "b"), ("C", "c"), ("D", "d"), ("E", "e"), ("F", "f"), ("G", "g"), ("H", "h"), ("I", "i"), ("J", "j"), ("K", "k"), ("L", "l"), ("M", "m"), ("N", "n"), ("O", "o"), ("P", "p"), ("Q", "q"), ("R", "r"), ("S", "s"), ("T", "t"), ("U", "u"), ("V", "v"), ("W", "w"), ("X", "x"), ("Y", "y"), ("Z", "z"), )) # First 4 entries are overridden multiple times. self.assertEqual( tbl["script_to_roman"]["map"], ( ("a", "9"), ("b", "0"), ("c", "7"), ("d", "8"), ("e", "E"), ("f", "F"), ("g", "G"), ("h", "H"), ("i", "I"), ("j", "J"), ("k", "K"), ("l", "L"), ("m", "M"), ("n", "N"), ("o", "O"), ("p", "P"), ("q", "Q"), ("r", "R"), ("s", "S"), ("t", "T"), ("u", "U"), ("v", "V"), ("w", "W"), ("x", "X"), ("y", "Y"), ("z", "Z"), )) class TestHooks(TestCase): """ Test parsing of hook functions. """ def setUp(self): environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR self.tables = reload_tables() def test_rot3(self): tbl = self.tables.load_table("rot3") self.assertEqual( tbl["script_to_roman"]["hooks"], { "begin_input_token": [ (scriptshifter.hooks.test.rotate, {"n": -3}) ] }) class TestDoubleCaps(TestCase): """ Test double capitalization configuration. """ def setUp(self): environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR self.tables = reload_tables() def test_dcaps_base1(self): cap_base1 = self.tables.load_table("cap_base1") assert "z︠h︡" in cap_base1["script_to_roman"]["double_cap"] def test_dcaps_base2(self): cap_base2 = self.tables.load_table("cap_base2") dcap = cap_base2["script_to_roman"]["double_cap"] assert len(dcap) == 2 assert "z︠h︡" in dcap assert "i︠o︡" in dcap def test_dcaps_inherited(self): cap_inherited = self.tables.load_table("cap_inherited") dcap = cap_inherited["script_to_roman"]["double_cap"] assert len(dcap) == 1 assert "z︠h︡" in dcap assert "i︠o︡" not in dcap