def test_regex_macro(self, active_window):
        macros = {
            "test": "$custom;$custom2;$custom3;$custom4",
            "expected": ".ext;.ext;.ext;.ext",
            "required": [],
            "macros": {
                "custom": [
                    "$file",
                    ["\\.\\w+$"]
                ],
                "custom2": [
                    "$file_name",
                    ["\\.\\w+$"]
                ],
                "custom3": [
                    ["$file", "\\.\\w+$"]
                ],
                "custom4": [
                    ["$file_name", "\\.\\w+$"]
                ]
            }
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_regex_macro(self, active_window):
        macros = {
            "test": "$custom;$custom2;$custom3;$custom4",
            "expected": ".ext;.ext;.ext;.ext",
            "required": [],
            "macros": {
                "custom": [
                    "$file",
                    ["\\.\\w+$"]
                ],
                "custom2": [
                    "$file_name",
                    ["\\.\\w+$"]
                ],
                "custom3": [
                    ["$file", "\\.\\w+$"]
                ],
                "custom4": [
                    ["$file_name", "\\.\\w+$"]
                ]
            }
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_none(self, active_window):
        macros = {
            "test": None,
            "expected": None,
            "required": None,
            "macros": None
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_required_macro7(self, active_window):
        macros = {
            "test": "$selection",
            "expected": None,
            "required": ["selection"],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_predefined_macro2(self, active_window):
        macros = {
            "test": "$file_name",
            "expected": None,
            "required": ["required", "file_name"],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_predefined_macro3(self, active_window):
        macros = {
            "test": "$require ; $file",
            "expected": " ; path/to/file.ext",
            "required": [],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_predefined_macro4(self, active_window):
        macros = {
            "test": "$parent$file$file_name",
            "expected": "path/topath/to/file.extfile.ext",
            "required": [],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_none(self, active_window):
        macros = {
            "test": None,
            "expected": None,
            "required": None,
            "macros": None
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_predefined_macro2(self, active_window):
        macros = {
            "test": "$file_name",
            "expected": None,
            "required": ["required", "file_name"],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_empty(self, active_window):
        macros = {
            "test": "",
            "expected": "",
            "required": [],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_predefined_macro5(self, active_window):
        macros = {
            "test": "$working$$$working_project$$$project",
            "expected": "path/to$path/to$another/path/to/directory",
            "required": [],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_predefined_macro5(self, active_window):
        macros = {
            "test": "$working$$$working_project$$$project",
            "expected": "path/to$path/to$another/path/to/directory",
            "required": [],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_empty(self, active_window):
        macros = {
            "test": "",
            "expected": "",
            "required": [],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_required_macro9(self, active_window):
        MockView.sel.return_value = [sublime.Region(5, 10)]
        macros = {
            "test": "$selection",
            "expected": "Hello",
            "required": ["selection"],
            "macros": {}
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_required_macro5(self, active_window):
        macros = {
            "test": "$required",
            "expected": "",
            "required": [],
            "macros": {
                "required": [
                    1,
                    [1, 2],
                    None,
                    [None, None]
                ]
            }
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_recursion_macro2(self, active_window):
        macros = {
            "test": "$required",
            "expected": "",
            "required": [],
            "macros": {
                "required": [
                    "$required2"
                ],
                "required2": [
                    "$required"
                ]
            }
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_required_macro5(self, active_window):
        macros = {
            "test": "$required",
            "expected": "",
            "required": [],
            "macros": {
                "required": [
                    1,
                    [1, 2],
                    None,
                    [None, None]
                ]
            }
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )
    def test_recursion_macro2(self, active_window):
        macros = {
            "test": "$required",
            "expected": "",
            "required": [],
            "macros": {
                "required": [
                    "$required2"
                ],
                "required2": [
                    "$required"
                ]
            }
        }

        self.assertEqual(
            Macro.parse_macro(
                string=macros["test"],
                custom_macros=macros["macros"],
                required=macros["required"]
            ),
            macros["expected"]
        )