Example #1
0
 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")
Example #2
0
 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")
Example #3
0
 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")
Example #4
0
 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")
Example #5
0
 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"])
Example #6
0
 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"])
Example #7
0
    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")
Example #8
0
 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, "ʔ")