def test_case_sensitive(self): mapping = Mapping([{"in": "A", "out": "b"}], case_sensitive=False) mapping_case_sensitive = Mapping([{"in": "A", "out": "b"}]) transducer = Transducer(mapping) transducer_case_sensitive = Transducer(mapping_case_sensitive) self.assertEqual(transducer("a").output_string, "b") self.assertEqual(transducer_case_sensitive("a").output_string, "a") self.assertEqual(transducer("A").output_string, "b")
def test_reverse(self): mapping = Mapping([{"in": "a", "out": "b"}]) mapping_reversed = Mapping([{"in": "a", "out": "b"}], reverse=True) transducer = Transducer(mapping) transducer_reversed = Transducer(mapping_reversed) self.assertEqual(transducer("a").output_string, "b") self.assertEqual(transducer("b").output_string, "b") self.assertEqual(transducer_reversed("a").output_string, "a") self.assertEqual(transducer_reversed("b").output_string, "a")
def test_escape_special(self): mapping = Mapping([{"in": r"\d", "out": "digit"}]) mapping_escaped = Mapping([{"in": r"\d", "out": "b"}], escape_special=True) transducer = Transducer(mapping) transducer_escaped = Transducer(mapping_escaped) self.assertEqual(transducer("1").output_string, "digit") self.assertEqual(transducer(r"\d").output_string, r"\d") self.assertEqual(transducer_escaped("1").output_string, "1") self.assertEqual(transducer_escaped(r"\d").output_string, "b")
def test_abbreviations(self): mapping = Mapping( os.path.join( os.path.dirname(public_data), "mappings", "abbreviation_config.yaml" ) ) self.assertEqual(mapping.mapping[0]["in"], "i|u") self.assertEqual(mapping.mapping[1]["in"], "a|e|i|o|u") transducer = Transducer(mapping) self.assertEqual(transducer("i").output_string, "1") self.assertEqual(transducer("e").output_string, "2")
def test_minimal(self): mapping = Mapping( os.path.join( os.path.dirname(public_data), "mappings", "minimal_config.yaml" ) ) transducer = Transducer(mapping) self.assertEqual(transducer("abb").output_string, "aaa") self.assertEqual(transducer("a").output_string, "a") self.assertFalse(mapping.wants_rules_sorted()) self.assertFalse(mapping.kwargs["case_sensitive"]) self.assertTrue(mapping.kwargs["escape_special"]) self.assertEqual(mapping.kwargs["norm_form"], "NFD") self.assertTrue(mapping.kwargs["reverse"])
def test_rule_ordering_from_config(self): """ Same as test_minimal, but uses "rule-ordering" instead of "as-is" in the config. """ mapping = Mapping( os.path.join(os.path.dirname(public_data), "mappings", "rule-ordering.yaml") ) transducer = Transducer(mapping) self.assertEqual(transducer("abb").output_string, "aaa") self.assertEqual(transducer("a").output_string, "a") self.assertTrue(mapping.wants_rules_sorted()) self.assertEqual(mapping.kwargs["rule_ordering"], "apply-longest-first") self.assertFalse(mapping.kwargs["case_sensitive"]) self.assertTrue(mapping.kwargs["escape_special"]) self.assertEqual(mapping.kwargs["norm_form"], "NFD") self.assertTrue(mapping.kwargs["reverse"])
def test_as_is(self): """ Test deprecated config: as_is. """ # explicitly set as_is=False log_output = io.StringIO() with redirect_stderr(log_output): mapping_sorted = Mapping( [{"in": "a", "out": "b"}, {"in": "aa", "out": "c"}], as_is=False ) self.assertTrue(mapping_sorted.wants_rules_sorted()) self.assertIn( "deprecated", log_output.getvalue(), "it should warn that the feature is deprecated", ) self.assertIn( "apply-longest-first", log_output.getvalue(), "it should show the equivalent rule_ordering setting", ) # explicitly set as_is=True log_output = io.StringIO() with redirect_stderr(log_output): mapping = Mapping( [{"in": "a", "out": "b"}, {"in": "aa", "out": "c"}], as_is=True ) self.assertFalse(mapping.wants_rules_sorted()) self.assertIn( "deprecated", log_output.getvalue(), "it should warn that the feature is deprecated", ) self.assertIn( "as-written", log_output.getvalue(), "it should show the equivalent rule_ordering setting", ) # test the default (rule_ordering="as-written") mapping_as_is = Mapping([{"in": "a", "out": "b"}, {"in": "aa", "out": "c"}]) self.assertFalse(mapping.wants_rules_sorted()) # test the alternative (rule_ordering="apply-longest-first") transducer = Transducer(mapping_sorted) transducer_as_is = Transducer(mapping_as_is) self.assertEqual(transducer("aa").output_string, "c") self.assertEqual(transducer_as_is("aa").output_string, "bb")
def test_no_escape(self): mapping = Mapping( os.path.join(os.path.dirname(public_data), "mappings", "no_escape.csv") ) transducer = Transducer(mapping) self.assertEqual(transducer("?").output_string, "ʔ")