Ejemplo n.º 1
0
class EngineTestCase(unittest.TestCase):
    """Test the ``Engine``."""

    def setUp(self) -> None:
        self.templates: typing.Dict[str, str] = {"a": ""}
        self.engine = Engine(
            loader=DictLoader(templates=self.templates),
            extensions=[CoreExtension()],
        )

    def test_template_not_found(self) -> None:
        """Raises IOError."""
        self.assertRaises(IOError, lambda: self.engine.get_template("x"))

    def test_import_not_found(self) -> None:
        """Raises IOError."""
        self.assertRaises(IOError, lambda: self.engine.import_name("x"))

    def test_remove_unknown_name(self) -> None:
        """Invalidate name that is not known to engine."""
        self.engine.remove("x")

    def test_remove_name(self) -> None:
        """Invalidate name that is known to engine."""
        # self.templates["a"] = ""
        self.engine.compile_import("a")
        self.engine.compile_template("a")
        self.engine.remove("a")
Ejemplo n.º 2
0
class EngineSyntaxErrorTestCase(unittest.TestCase):
    """Test the ``Engine``."""

    def setUp(self) -> None:
        self.templates: typing.Dict[str, str] = {}
        self.engine = Engine(
            loader=DictLoader(templates=self.templates),
            extensions=[CoreExtension()],
        )

    def test_compile_template_error(self) -> None:
        """Raises SyntaxError."""
        self.templates[
            "x"
        ] = """
            @if :
            @end
        """
        self.assertRaises(
            SyntaxError, lambda: self.engine.compile_template("x")
        )

    def test_compile_import_error(self) -> None:
        """Raises SyntaxError."""
        self.templates[
            "m"
        ] = """
            @def x():
                @# ignore
                @if :
                @end
            @end
        """
        self.assertRaises(SyntaxError, lambda: self.engine.compile_import("m"))
Ejemplo n.º 3
0
 def preprocess_template(
     self,
     runtime_engine: Engine,
     name: str,
     ctx: typing.Mapping[str, typing.Any],
 ) -> None:
     self.lock.acquire(True)
     try:
         if name not in runtime_engine.renders:
             source = self.engine.render(name, ctx, {}, {})
             loader = runtime_engine.loader.loaders[0]  # type: ignore
             loader.templates[name] = source
             runtime_engine.compile_template(name)
             del loader.templates[name]
     finally:
         self.lock.release()