Пример #1
0
    def test_create_wrapper_full(self):
        data = {
            "name": "test",
            "rxtype_name": "re",
            "child_types": ["alpha_lower", "digit"],
            "child_count": 3,
            "is_modifiable": False,
            "strip_child_mods": True,
            "uniform_child_types": True,
            "display_function_name": "or",
            "compile_function_name": "or",
        }
        wrappers = RxWrapperSet(self.char_sets, init_wrappers=False)
        wrapper = wrappers.create_wrapper(**data)
        mock_node = MockNode(children=[
            MockNode(_d("f"), _d("f")),
            MockNode(_d("j"), _d("j")),
        ])

        self.assertEqual(wrapper.name, data["name"])
        self.assertEqual(wrapper.rxtype.name, data["rxtype_name"])
        self.assertEqual(wrapper.child_types, data["child_types"])
        self.assertEqual(wrapper.child_count, data["child_count"])
        self.assertFalse(wrapper.is_modifiable)
        self.assertTrue(wrapper.strip_child_mods)
        self.assertTrue(wrapper.uniform_child_types)
        self.assertEqual(wrapper.display_function(mock_node), d_or(mock_node))
        self.assertIn(wrapper.compile_function(mock_node), ["f", "j"])
Пример #2
0
    def create_wrapper(
        self,
        name: str,
        rxtype_name: str,
        child_types: Optional[Sequence[str]] = None,
        child_count: Optional[int] = None,
        is_modifiable: Optional[bool] = None,
        strip_child_mods: Optional[bool] = None,
        uniform_child_types: Optional[bool] = None,
        compile_function_name: Optional[str] = None,
        display_function_name: Optional[str] = None,
        is_char_set: Optional[bool] = None,
        display_value: Optional[str] = None,
        char_value: Optional[str] = None,
        char_set: Optional[Iterable[str]] = None,
    ) -> RxWrapper:
        func_name = self.get_wrapper_func_name(name)

        display_value = display_value or char_value
        if display_value:
            display_value = display_value.format(char_value)

        else:
            if (display_function_name not in rxwrapper_functions["display"]
                    and func_name not in rxwrapper_functions["display"]):
                raise TypeError(
                    "valid display function name or display value required")

            if (compile_function_name not in rxwrapper_functions["compile"]
                    and func_name not in rxwrapper_functions["compile"]):
                raise TypeError(
                    "valid compile function name or display value required")

        rxtype = self._rxtypes[rxtype_name]

        display_function = rxwrapper_functions["display"].get(
            display_function_name or func_name, _d(display_value))
        compile_function = rxwrapper_functions["compile"].get(
            compile_function_name or func_name, _d(display_value))

        if is_char_set:
            if not char_value:
                raise TypeError("char set wrappers require a char value")
            name = f"{name}({char_value})"

        return RxWrapper(
            name,
            display_function,
            rxtype,
            child_types,
            child_count,
            is_modifiable,
            compile_function,
            strip_child_mods,
            uniform_child_types,
        )
Пример #3
0
    def test_create_wrapper_defaults_func_name(self):
        wrappers = RxWrapperSet(self.char_sets, init_wrappers=False)
        set_wrapper = wrappers.create_wrapper("set", "re")
        mock_node = MockNode(children=[
            MockNode(_d("a"), _d("a"), rxtype=RxType("test")),
        ], )

        self.assertEqual(set_wrapper.display_function(mock_node),
                         d_set(mock_node))
        self.assertEqual(set_wrapper.compile_function(mock_node),
                         c_set(mock_node))
Пример #4
0
    def test_expand_set_range(self):
        mock_node = MockNode(
            name="range",
            char_sets=self.char_sets,
            children=[
                MockNode(_d("f"), _d("f")),
                MockNode(_d("j"), _d("j")),
            ],
        )

        result = expand_set(mock_node)
        self.assertSetEqual(result, set(["f", "g", "h", "i", "j"]))
Пример #5
0
 def test__d_meta(self):
     data = r"\d"
     result = _d(data)(None)
     self.assertEqual(result, data)
Пример #6
0
 def test__d(self):
     data = "a"
     result = _d(data)(None)
     self.assertEqual(result, data)