test01_cfg.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from unittest import TestCase
  2. from os import environ
  3. import scriptshifter
  4. from tests import TEST_DATA_DIR, reload_tables
  5. class TestConfig(TestCase):
  6. """ Test configuration parsing. """
  7. def setUp(self):
  8. environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR
  9. self.tables = reload_tables()
  10. def test_ordering(self):
  11. tbl = self.tables.load_table("ordering")
  12. exp_order = ["ABCD", "AB", "A", "BCDE", "BCD", "BEFGH", "B"]
  13. self.assertEqual(
  14. [s[0] for s in tbl["roman_to_script"]["map"]], exp_order)
  15. class TestOverride(TestCase):
  16. """ Test configuration overrides. """
  17. def setUp(self):
  18. environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR
  19. self.tables = reload_tables()
  20. def test_override_map(self):
  21. tbl = self.tables.load_table("inherited")
  22. self.assertEqual(tbl["general"]["name"], "Test inheritance leaf file")
  23. # Entries are additive.
  24. self.assertEqual(
  25. tbl["roman_to_script"]["ignore"],
  26. ["Fritter my wig", "Hi", "Ho", "Thing-um-a-jig"])
  27. self.assertEqual(
  28. tbl["roman_to_script"]["map"],
  29. (
  30. ("A", "a"),
  31. ("B", "b"),
  32. ("C", "c"),
  33. ("D", "d"),
  34. ("E", "e"),
  35. ("F", "f"),
  36. ("G", "g"),
  37. ("H", "h"),
  38. ("I", "i"),
  39. ("J", "j"),
  40. ("K", "k"),
  41. ("L", "l"),
  42. ("M", "m"),
  43. ("N", "n"),
  44. ("O", "o"),
  45. ("P", "p"),
  46. ("Q", "q"),
  47. ("R", "r"),
  48. ("S", "s"),
  49. ("T", "t"),
  50. ("U", "u"),
  51. ("V", "v"),
  52. ("W", "w"),
  53. ("X", "x"),
  54. ("Y", "y"),
  55. ("Z", "z"),
  56. ))
  57. # First 4 entries are overridden multiple times.
  58. self.assertEqual(
  59. tbl["script_to_roman"]["map"],
  60. (
  61. ("a", "9"),
  62. ("b", "0"),
  63. ("c", "7"),
  64. ("d", "8"),
  65. ("e", "E"),
  66. ("f", "F"),
  67. ("g", "G"),
  68. ("h", "H"),
  69. ("i", "I"),
  70. ("j", "J"),
  71. ("k", "K"),
  72. ("l", "L"),
  73. ("m", "M"),
  74. ("n", "N"),
  75. ("o", "O"),
  76. ("p", "P"),
  77. ("q", "Q"),
  78. ("r", "R"),
  79. ("s", "S"),
  80. ("t", "T"),
  81. ("u", "U"),
  82. ("v", "V"),
  83. ("w", "W"),
  84. ("x", "X"),
  85. ("y", "Y"),
  86. ("z", "Z"),
  87. ))
  88. class TestHooks(TestCase):
  89. """ Test parsing of hook functions. """
  90. def setUp(self):
  91. environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR
  92. self.tables = reload_tables()
  93. def test_rot3(self):
  94. tbl = self.tables.load_table("rot3")
  95. self.assertEqual(
  96. tbl["script_to_roman"]["hooks"],
  97. {
  98. "begin_input_token": [
  99. (scriptshifter.hooks.test.rotate, {"n": -3})
  100. ]
  101. })
  102. class TestDoubleCaps(TestCase):
  103. """ Test double capitalization configuration. """
  104. def setUp(self):
  105. environ["TXL_CONFIG_TABLE_DIR"] = TEST_DATA_DIR
  106. self.tables = reload_tables()
  107. def test_dcaps_base1(self):
  108. cap_base1 = self.tables.load_table("cap_base1")
  109. assert "z︠h︡" in cap_base1["script_to_roman"]["double_cap"]
  110. def test_dcaps_base2(self):
  111. cap_base2 = self.tables.load_table("cap_base2")
  112. dcap = cap_base2["script_to_roman"]["double_cap"]
  113. assert len(dcap) == 2
  114. assert "z︠h︡" in dcap
  115. assert "i︠o︡" in dcap
  116. def test_dcaps_inherited(self):
  117. cap_inherited = self.tables.load_table("cap_inherited")
  118. dcap = cap_inherited["script_to_roman"]["double_cap"]
  119. assert len(dcap) == 1
  120. assert "z︠h︡" in dcap
  121. assert "i︠o︡" not in dcap