literal string arguments to the default filter are always treated as safe strings regardless of the autoescaping state note we have to use a here otherwise the invalid template variable string interferes with the test result literal string arguments to the default filter are always treated as safe strings regardless of the auto escaping state note we have to use a here otherwise the invalid template variable string interferes with the test result
from django.template.defaultfilters import default
from django.test import SimpleTestCase
from django.utils.safestring import mark_safe

from ..utils import setup


class DefaultTests(SimpleTestCase):
    

    @setup({"default01": '{{ a|default:"x<" }}'})
    def test_default01(self):
        output = self.engine.render_to_string("default01", {"a": ""})
        self.assertEqual(output, "x<")

    @setup({"default02": '{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}'})
    def test_default02(self):
        output = self.engine.render_to_string("default02", {"a": ""})
        self.assertEqual(output, "x<")

    @setup({"default03": '{{ a|default:"x<" }}'})
    def test_default03(self):
        output = self.engine.render_to_string("default03", {"a": mark_safe("x>")})
        self.assertEqual(output, "x>")

    @setup({"default04": '{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}'})
    def test_default04(self):
        output = self.engine.render_to_string("default04", {"a": mark_safe("x>")})
        self.assertEqual(output, "x>")


class DefaultIfNoneTests(SimpleTestCase):
    @setup({"default_if_none01": '{{ a|default:"x<" }}'})
    def test_default_if_none01(self):
        output = self.engine.render_to_string("default_if_none01", {"a": None})
        self.assertEqual(output, "x<")

    @setup(
        {
            "default_if_none02": (
                '{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}'
            )
        }
    )
    def test_default_if_none02(self):
        output = self.engine.render_to_string("default_if_none02", {"a": None})
        self.assertEqual(output, "x<")


class FunctionTests(SimpleTestCase):
    def test_value(self):
        self.assertEqual(default("val", "default"), "val")

    def test_none(self):
        self.assertEqual(default(None, "default"), "default")

    def test_empty_string(self):
        self.assertEqual(default("", "default"), "default")