diff options
Diffstat (limited to 'tests/test_template_shortcodes.py')
| -rw-r--r-- | tests/test_template_shortcodes.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/test_template_shortcodes.py b/tests/test_template_shortcodes.py new file mode 100644 index 0000000..c6c948d --- /dev/null +++ b/tests/test_template_shortcodes.py @@ -0,0 +1,78 @@ +"""Test template-based shortcodes.""" + +import pytest + +from nikola import Nikola + + +def test_mixedargs(site): + test_template = """ +arg1: {{ _args[0] }} +arg2: {{ _args[1] }} +kwarg1: {{ kwarg1 }} +kwarg2: {{ kwarg2 }} +""" + + site.shortcode_registry["test1"] = site._make_renderfunc(test_template) + site.shortcode_registry["test2"] = site._make_renderfunc( + "Something completely different" + ) + + res = site.apply_shortcodes("{{% test1 kwarg1=spamm arg1 kwarg2=foo,bar arg2 %}}")[ + 0 + ] + + assert res.strip() == """ +arg1: arg1 +arg2: arg2 +kwarg1: spamm +kwarg2: foo,bar""".strip() + + +@pytest.mark.parametrize( + "template, data, expected_result", + [ + # one argument + ("arg={{ _args[0] }}", "{{% test1 onearg %}}", "arg=onearg"), + ("arg={{ _args[0] }}", '{{% test1 "one two" %}}', "arg=one two"), + # keyword arguments + ("foo={{ foo }}", "{{% test1 foo=bar %}}", "foo=bar"), + ("foo={{ foo }}", '{{% test1 foo="bar baz" %}}', "foo=bar baz"), + ("foo={{ foo }}", '{{% test1 foo="bar baz" spamm=ham %}}', "foo=bar baz"), + # data + ( + "data={{ data }}", + "{{% test1 %}}spamm spamm{{% /test1 %}}", + "data=spamm spamm", + ), + ("data={{ data }}", "{{% test1 spamm %}}", "data="), + ("data={{ data }}", "{{% test1 data=dummy %}}", "data="), + ], +) +def test_applying_shortcode(site, template, data, expected_result): + site.shortcode_registry["test1"] = site._make_renderfunc(template) + + assert site.apply_shortcodes(data)[0] == expected_result + + +@pytest.fixture(scope="module") +def site(): + s = ShortcodeFakeSite() + s.init_plugins() + s._template_system = None + return s + + +class ShortcodeFakeSite(Nikola): + def _get_template_system(self): + if self._template_system is None: + # Load template plugin + self._template_system = self.plugin_manager.getPluginByName( + "jinja", "TemplateSystem" + ).plugin_object + self._template_system.set_directories(".", "cache") + self._template_system.set_site(self) + + return self._template_system + + template_system = property(_get_template_system) |
