Example #1
0
    def test_extract_dynamic_tag_attributes(self):
        source = l.enumerate_source('')
        attrs, tail, source = l.extract_dynamic_tag_attributes(
            "**test", source, self.mako_syntax, False)
        self.assertTrue(
            attrs.startswith(
                "\n%for __plim_key__, __plim_value__ in test.items()"))

        attrs, tail, source = l.extract_dynamic_tag_attributes(
            "**test(**values)", source, self.mako_syntax, False)
        self.assertTrue(
            attrs.startswith(
                "\n%for __plim_key__, __plim_value__ in test(**values).items()"
            ))

        attrs, tail, source = l.extract_dynamic_tag_attributes(
            "**test**test2", source, self.mako_syntax, False)
        self.assertTrue(
            attrs.startswith(
                "\n%for __plim_key__, __plim_value__ in test.items()"))

        # Test multi-line expression
        source = l.enumerate_source('**values\n)')
        attrs, tail, source = l.extract_dynamic_tag_attributes(
            "**test(\n", source, self.mako_syntax, False)
        self.assertTrue(
            attrs.startswith(
                "\n%for __plim_key__, __plim_value__ in test(**values).items()"
            ))
Example #2
0
 def test_case(template, result):
     """Use files for multiline test cases"""
     template = l.enumerate_source(self.get_file_contents(template))
     result = l.enumerate_source(self.get_file_contents(result))
     for lineno, line in template:
         if line.strip():
             _, result_line = next(result)
             line, close_buf, _, tail, __ = l.extract_tag_line(line, template)
             self.assertEqual(line + close_buf, result_line.rstrip())
Example #3
0
    def test_explicit_literal(self):
        result, _, __, ___ = l.parse_explicit_literal(0, "| Test", None, l.enumerate_source(""))
        assert result == "Test"

        result, _, __, ___ = l.parse_explicit_literal(0, ", Test", None, l.enumerate_source(""))
        assert result == "Test "

        result, _, __, ___ = l.parse_explicit_literal(0, ",Test\n Test", None, l.enumerate_source(""))
        assert result == "Test\n Test "
Example #4
0
 def test_case(template, result):
     """Use files for multiline test cases"""
     template = l.enumerate_source(self.get_file_contents(template))
     result = l.enumerate_source(self.get_file_contents(result))
     for lineno, line in template:
         if line.strip():
             _, result_line = next(result)
             line, close_buf, _, __ = l.extract_plim_line(
                 line, template)
             self.assertEqual(line + close_buf, result_line.rstrip())
Example #5
0
    def test_explicit_literal(self):
        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, "| Test", None, l.enumerate_source(""), self.mako_syntax)
        assert result == "Test"

        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, ", Test", None, l.enumerate_source(""), self.mako_syntax)
        assert result == "Test "

        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, ",Test\n Test", None, l.enumerate_source(""), self.mako_syntax)
        assert result == "Test\n Test "
Example #6
0
    def test_explicit_literal(self):
        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, "| Test", None, l.enumerate_source(""), l.STANDARD_PARSERS)
        assert result == "Test"

        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, ", Test", None, l.enumerate_source(""), l.STANDARD_PARSERS)
        assert result == "Test "

        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, ",Test\n Test", None, l.enumerate_source(""), l.STANDARD_PARSERS)
        assert result == "Test\n Test "
Example #7
0
    def test_explicit_literal(self):
        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, "| Test", None, l.enumerate_source(""), self.mako_syntax)
        assert result == "Test"

        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, ", Test", None, l.enumerate_source(""), self.mako_syntax)
        assert result == "Test "

        result, _, __, ___ = l.parse_explicit_literal_with_embedded_markup(
            0, ",Test\n Test", None, l.enumerate_source(""), self.mako_syntax)
        assert result == "Test\n Test "
Example #8
0
    def test_explicit_literal(self):
        result, _, __, ___ = l.parse_explicit_literal(0, "| Test", None,
                                                      l.enumerate_source(""))
        assert result == "Test"

        result, _, __, ___ = l.parse_explicit_literal(0, ", Test", None,
                                                      l.enumerate_source(""))
        assert result == "Test "

        result, _, __, ___ = l.parse_explicit_literal(0, ",Test\n Test", None,
                                                      l.enumerate_source(""))
        assert result == "Test\n Test "
Example #9
0
    def test_extract_dynamic_tag_attributes(self):
        source = l.enumerate_source('')
        attrs, tail, source = l.extract_dynamic_tag_attributes("**test", source, False)
        self.assertTrue(attrs.startswith("\n%for __plim_key__, __plim_value__ in test.items()"))

        attrs, tail, source = l.extract_dynamic_tag_attributes("**test(**values)", source, False)
        self.assertTrue(attrs.startswith("\n%for __plim_key__, __plim_value__ in test(**values).items()"))

        attrs, tail, source = l.extract_dynamic_tag_attributes("**test**test2", source, False)
        self.assertTrue(attrs.startswith("\n%for __plim_key__, __plim_value__ in test.items()"))

        # Test multi-line expression
        source = l.enumerate_source('**values\n)')
        attrs, tail, source = l.extract_dynamic_tag_attributes("**test(\n", source, False)
        self.assertTrue(attrs.startswith("\n%for __plim_key__, __plim_value__ in test(**values).items()"))
Example #10
0
 def test_stylus(self):
     source = self.get_file_contents('stylus_test.plim')
     source = l.enumerate_source(source)
     _, line = next(source)
     result = self.get_file_contents('stylus_result.mako')
     data, _, __, ___ = l.parse_markup_languages(0, '', l.PARSE_EXTENSION_LANGUAGES_RE.match(line), source)
     self.assertEqual(data.strip(), result.strip())
Example #11
0
 def test_extract_dynamic_attr_value(self):
     for terminators in (l.ATTRIBUTE_VALUE_TERMINATORS_WITH_PARENTHESES, l.ATTRIBUTE_VALUE_TERMINATORS):
         source = l.enumerate_source("")
         value, tail, _ = l.extract_dynamic_attr_value(
             "(value in func('test') and 'yes' or 'no')", source, terminators, self.mako_syntax
         )
         assert value == "value in func('test') and 'yes' or 'no'"
         assert tail == ""
Example #12
0
 def test_stylus(self):
     source = self.get_file_contents('stylus_test.html')
     source = l.enumerate_source(source)
     _, line = next(source)
     result = self.get_file_contents('stylus_result.html')
     data, _, __, ___ = l.parse_markup_languages(
         0, '', l.PARSE_EXTENSION_LANGUAGES_RE.match(line), source)
     self.assertEqual(data.strip(), result.strip())
Example #13
0
 def test_extract_dynamic_attr_value(self):
     for terminators in (l.ATTRIBUTE_VALUE_TERMINATORS_WITH_PARENTHESES,
                         l.ATTRIBUTE_VALUE_TERMINATORS):
         source = l.enumerate_source('')
         value, tail, _ = l.extract_dynamic_attr_value(
             "(value in func('test') and 'yes' or 'no')", source,
             terminators)
         assert value == "value in func('test') and 'yes' or 'no'"
         assert tail == ''
Example #14
0
 def test_coffee(self):
     source = self.get_file_contents("coffee_test.plim")
     source = l.enumerate_source(source)
     _, line = next(source)
     result = self.get_file_contents("coffee_result.mako")
     data, _, __, ___ = l.parse_markup_languages(
         0, "", self.mako_syntax.PARSE_EXTENSION_LANGUAGES_RE.match(line), source, self.mako_syntax
     )
     self.assertEqual(data.strip(), result.strip())
Example #15
0
 def test_coffee(self):
     source = self.get_file_contents('coffee_test.plim')
     source = l.enumerate_source(source)
     _, line = next(source)
     result = self.get_file_contents('coffee_result.mako')
     data, _, __, ___ = l.parse_markup_languages(
         0, '', self.mako_syntax.PARSE_EXTENSION_LANGUAGES_RE.match(line),
         source, self.mako_syntax)
     self.assertEqual(data.strip(), result.strip())
Example #16
0
    def test_extract_ident(self):
        source = l.enumerate_source('')
        str_ = '#test'
        result, _, __ = l.extract_identifier(str_, source)
        self.assertEqual(result, str_)

        str_ = '#test '
        result, _, __ = l.extract_identifier(str_, source)
        self.assertNotEqual(result, str_)
        self.assertEqual(result, str_.strip())

        str_ = '#test.class'
        result, _, __ = l.extract_identifier(str_, source)
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '#test')
        self.assertEqual(str_[len(result)], '.')

        str_ = '.test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.test')

        str_ = '.${test.test}.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.${test.test}')

        str_ = '.${test.test}test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.${test.test}test')

        str_ = '.test-${test.test}test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.test-${test.test}test')

        str_ = '.test-${test.test + "${{\'test\':1}}"}${test}test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)],
                         '.test-${test.test + "${{\'test\':1}}"}${test}test')

        str_ = u'.абв.где'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], u'.абв')
Example #17
0
    def test_extract_ident(self):
        source = l.enumerate_source("")
        str_ = "#test"
        result, _, __ = l.extract_identifier(str_, source)
        self.assertEqual(result, str_)

        str_ = "#test "
        result, _, __ = l.extract_identifier(str_, source)
        self.assertNotEqual(result, str_)
        self.assertEqual(result, str_.strip())

        str_ = "#test.class"
        result, _, __ = l.extract_identifier(str_, source)
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], "#test")
        self.assertEqual(str_[len(result)], ".")

        str_ = ".test.class"
        result, _, __ = l.extract_identifier(str_, source, ".")
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], ".test")

        str_ = ".${test.test}.class"
        result, _, __ = l.extract_identifier(str_, source, ".")
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], ".${test.test}")

        str_ = ".${test.test}test.class"
        result, _, __ = l.extract_identifier(str_, source, ".")
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], ".${test.test}test")

        str_ = ".test-${test.test}test.class"
        result, _, __ = l.extract_identifier(str_, source, ".")
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], ".test-${test.test}test")

        str_ = ".test-${test.test + \"${{'test':1}}\"}${test}test.class"
        result, _, __ = l.extract_identifier(str_, source, ".")
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], ".test-${test.test + \"${{'test':1}}\"}${test}test")

        str_ = u".абв.где"
        result, _, __ = l.extract_identifier(str_, source, ".")
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[: len(result)], u".абв")
Example #18
0
    def test_extract_ident(self):
        source = l.enumerate_source('')
        str_ = '#test'
        result, _, __ = l.extract_identifier(str_, source)
        self.assertEqual(result, str_)

        str_ = '#test '
        result, _, __ = l.extract_identifier(str_, source)
        self.assertNotEqual(result, str_)
        self.assertEqual(result, str_.strip())

        str_ = '#test.class'
        result, _, __ = l.extract_identifier(str_, source)
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '#test')
        self.assertEqual(str_[len(result)], '.')

        str_ = '.test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.test')

        str_ = '.${test.test}.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.${test.test}')

        str_ = '.${test.test}test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.${test.test}test')

        str_ = '.test-${test.test}test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.test-${test.test}test')

        str_ = '.test-${test.test + "${{\'test\':1}}"}${test}test.class'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], '.test-${test.test + "${{\'test\':1}}"}${test}test')

        str_ = u'.абв.где'
        result, _, __ = l.extract_identifier(str_, source, '.')
        self.assertNotEqual(result, str_)
        self.assertEqual(str_[:len(result)], u'.абв')
Example #19
0
    def test_extract_mako_expression(self):
        str_ = '${x}'
        source = l.enumerate_source('')
        result, tail, _ = l.extract_mako_expression(str_, source)
        self.assertEqual(result, str_)
        self.assertEqual(str_[:len(result)], str_)

        str_ = """${{"test\\"":'test}}}'}}"""
        result, tail, _ = l.extract_mako_expression(str_, source)
        self.assertEqual(result, str_)
        self.assertEqual(str_[:len(result)], str_)

        str_ = """${{"test\\"":{'ddd': 'test}}}', 'eee':{}}}}"""
        result, tail, _ = l.extract_mako_expression(str_, source)
        self.assertEqual(result, str_)
        self.assertEqual(str_[:len(result)], str_)

        str_ = """{{"test\\"":'test}}}'}}"""
        result = l.extract_mako_expression(str_, source)
        self.assertIsNone(result)

        str_ = """{{"test\\"":'test}}}'}"""
        result = l.extract_mako_expression(str_, source)
        self.assertIsNone(result)
Example #20
0
    def test_extract_mako_expression(self):
        str_ = '${x}'
        source = l.enumerate_source('')
        result, tail, _ = l.extract_mako_expression(str_, source)
        self.assertEqual(result, str_)
        self.assertEqual(str_[:len(result)], str_)

        str_ = """${{"test\\"":'test}}}'}}"""
        result, tail, _ = l.extract_mako_expression(str_, source)
        self.assertEqual(result, str_)
        self.assertEqual(str_[:len(result)], str_)

        str_ = """${{"test\\"":{'ddd': 'test}}}', 'eee':{}}}}"""
        result, tail, _ = l.extract_mako_expression(str_, source)
        self.assertEqual(result, str_)
        self.assertEqual(str_[:len(result)], str_)

        str_ = """{{"test\\"":'test}}}'}}"""
        result = l.extract_mako_expression(str_, source)
        self.assertIsNone(result)

        str_ = """{{"test\\"":'test}}}'}"""
        result = l.extract_mako_expression(str_, source)
        self.assertIsNone(result)
Example #21
0
    def test_parse_tag_attribute(self):
        def assert_this(str_, parentheses, attr_, tail):
            source = l.enumerate_source('')
            result = l.extract_tag_attribute(str_, source, parentheses)
            self.assertEqual(result[0], attr_)
            self.assertEqual(tail, result[1])

        source = l.enumerate_source('')
        self.assertEqual(l.extract_tag_attribute("", source), None)
        self.assertEqual(l.extract_tag_attribute(" ", source), None)
        self.assertEqual(l.extract_tag_attribute("=", source), None)
        self.assertEqual(l.extract_tag_attribute(" = ", source), None)
        self.assertEqual(l.extract_tag_attribute("|", source), None)
        self.assertEqual(l.extract_tag_attribute("'", source), None)
        self.assertEqual(l.extract_tag_attribute("()", source, True), None)
        self.assertEqual(l.extract_tag_attribute(")", source, True), None)

        assert_this('attr="value"', False, 'attr="value"', '')
        assert_this('attr=${val}', False,  'attr="${val}"', '')
        assert_this('attr=(val)', False,  'attr="${val}"', '')

        # Test digital values
        assert_this('attr=7 attr2=val', False,  'attr="7"', ' attr2=val')
        assert_this('attr=.7 attr2=val', False,  'attr=".7"', ' attr2=val')
        assert_this('attr=-7 attr2=val', False,  'attr="-7"', ' attr2=val')
        assert_this('attr=+7 attr2=val', False,  'attr="+7"', ' attr2=val')
        assert_this('attr=-.7 attr2=val', False,  'attr="-.7"', ' attr2=val')
        assert_this('attr=+.7 attr2=val', False,  'attr="+.7"', ' attr2=val')
        assert_this('attr=7% attr2=val', False,  'attr="7%"', ' attr2=val')
        
        assert_this('attr=10.7 attr2=val', False,  'attr="10.7"', ' attr2=val')
        assert_this('attr=-10.7 attr2=val', False,  'attr="-10.7"', ' attr2=val')
        assert_this('attr=+10.7 attr2=val', False,  'attr="+10.7"', ' attr2=val')
        assert_this('attr=10.107 attr2=val', False,  'attr="10.107"', ' attr2=val')
        assert_this('attr=107 attr2=val', False,  'attr="107"', ' attr2=val')

        assert_this('style=c.selected_cover', False,  'style="${c.selected_cover}"', '')
        assert_this('href=item[\'url\']', False,  'href="${item[\'url\']}"', '')
        assert_this('value=extra_title[0]', False,  'value="${extra_title[0]}"', '')

        assert_this('attr=obj.url(request, func("test([\'") + "{test}".format(test="123"), cover[\'image\'])', False,  'attr="${obj.url(request, func("test([\'") + "{test}".format(test="123"), cover[\'image\'])}"', '')

        assert_this('attr=${val} selected', False,  'attr="${val}"', ' selected')
        assert_this('attr=(val) selected', False,  'attr="${val}"', ' selected')
        assert_this('attr=val selected', False,  'attr="${val}"', ' selected')
        assert_this('attr=_(\'i18n message\') selected', False,  'attr="${_(\'i18n message\')}"', ' selected')
        assert_this('attr=${val}? selected', False,  """${(val) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=(val)? selected', False,  """${(val) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=val? selected', False,  """${(val) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=${val + 1}? selected', False,  """${(val + 1) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=(val + 1)? selected', False,  """${(val + 1) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr="${val}"? selected', False,  'attr="${val}"', '? selected')
        assert_this('attr="${\\"val\\"}"? selected', False,  'attr="${"val"}"', '? selected')

        assert_this('attr="value")', True, 'attr="value"', ')')
        assert_this('attr=${val})', True, 'attr="${val}"', ')')
        assert_this('attr=(val))', True, 'attr="${val}"', ')')
        assert_this('attr=${val}?)', True, """${(val) and 'attr="attr"' or ''|n}""", ')')
        assert_this('attr=(val)?)', True, """${(val) and 'attr="attr"' or ''|n}""", ')')
        assert_this('attr=(val("test() is a function"))?)', True, """${(val("test() is a function")) and 'attr="attr"' or ''|n}""", ')')
        assert_this('attr=${val} selected)', True, 'attr="${val}"', ' selected)')
        assert_this('attr=(val) selected)', True, 'attr="${val}"', ' selected)')
        assert_this('attr=val) selected', True, 'attr="${val}"', ') selected')
        assert_this('attr="${\\"val\\"}"?) selected', True,  'attr="${"val"}"', '?) selected')

        assert_this('attr${attr}attr="${\\"val\\"}"?) selected', True,  'attr${attr}attr="${"val"}"', '?) selected')
Example #22
0
 def assert_this(str_, parentheses, attr_, tail):
     source = l.enumerate_source('')
     result = l.extract_tag_attribute(str_, source, parentheses)
     self.assertEqual(result[0], attr_)
     self.assertEqual(tail, result[1])
Example #23
0
 def assert_this(str_, parentheses, attr_, tail):
     source = l.enumerate_source('')
     result = l.extract_tag_attribute(str_, source, parentheses)
     self.assertEqual(result[0], attr_)
     self.assertEqual(tail, result[1])
Example #24
0
    def test_parse_tag_attribute(self):
        def assert_this(str_, parentheses, attr_, tail):
            source = l.enumerate_source('')
            result = l.extract_tag_attribute(str_, source, parentheses)
            self.assertEqual(result[0], attr_)
            self.assertEqual(tail, result[1])

        source = l.enumerate_source('')
        self.assertEqual(l.extract_tag_attribute("", source), None)
        self.assertEqual(l.extract_tag_attribute(" ", source), None)
        self.assertEqual(l.extract_tag_attribute("=", source), None)
        self.assertEqual(l.extract_tag_attribute(" = ", source), None)
        self.assertEqual(l.extract_tag_attribute("|", source), None)
        self.assertEqual(l.extract_tag_attribute("'", source), None)
        self.assertEqual(l.extract_tag_attribute("()", source, True), None)
        self.assertEqual(l.extract_tag_attribute(")", source, True), None)

        assert_this('attr="value"', False, 'attr="value"', '')
        assert_this('attr=${val}', False, 'attr="${val}"', '')
        assert_this('attr=(val)', False, 'attr="${val}"', '')

        # Test digital values
        assert_this('attr=7 attr2=val', False, 'attr="7"', ' attr2=val')
        assert_this('attr=.7 attr2=val', False, 'attr=".7"', ' attr2=val')
        assert_this('attr=-7 attr2=val', False, 'attr="-7"', ' attr2=val')
        assert_this('attr=+7 attr2=val', False, 'attr="+7"', ' attr2=val')
        assert_this('attr=-.7 attr2=val', False, 'attr="-.7"', ' attr2=val')
        assert_this('attr=+.7 attr2=val', False, 'attr="+.7"', ' attr2=val')
        assert_this('attr=7% attr2=val', False, 'attr="7%"', ' attr2=val')

        assert_this('attr=10.7 attr2=val', False, 'attr="10.7"', ' attr2=val')
        assert_this('attr=-10.7 attr2=val', False, 'attr="-10.7"',
                    ' attr2=val')
        assert_this('attr=+10.7 attr2=val', False, 'attr="+10.7"',
                    ' attr2=val')
        assert_this('attr=10.107 attr2=val', False, 'attr="10.107"',
                    ' attr2=val')
        assert_this('attr=107 attr2=val', False, 'attr="107"', ' attr2=val')

        assert_this('style=c.selected_cover', False,
                    'style="${c.selected_cover}"', '')
        assert_this('href=item[\'url\']', False, 'href="${item[\'url\']}"', '')
        assert_this('value=extra_title[0]', False, 'value="${extra_title[0]}"',
                    '')

        assert_this(
            'attr=obj.url(request, func("test([\'") + "{test}".format(test="123"), cover[\'image\'])',
            False,
            'attr="${obj.url(request, func("test([\'") + "{test}".format(test="123"), cover[\'image\'])}"',
            '')

        assert_this('attr=${val} selected', False, 'attr="${val}"',
                    ' selected')
        assert_this('attr=(val) selected', False, 'attr="${val}"', ' selected')
        assert_this('attr=val selected', False, 'attr="${val}"', ' selected')
        assert_this('attr=_(\'i18n message\') selected', False,
                    'attr="${_(\'i18n message\')}"', ' selected')
        assert_this('attr=${val}? selected', False,
                    """${(val) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=(val)? selected', False,
                    """${(val) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=val? selected', False,
                    """${(val) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=${val + 1}? selected', False,
                    """${(val + 1) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr=(val + 1)? selected', False,
                    """${(val + 1) and 'attr="attr"' or ''|n}""", ' selected')
        assert_this('attr="${val}"? selected', False, 'attr="${val}"',
                    '? selected')
        assert_this('attr="${\\"val\\"}"? selected', False, 'attr="${"val"}"',
                    '? selected')

        assert_this('attr="value")', True, 'attr="value"', ')')
        assert_this('attr=${val})', True, 'attr="${val}"', ')')
        assert_this('attr=(val))', True, 'attr="${val}"', ')')
        assert_this('attr=${val}?)', True,
                    """${(val) and 'attr="attr"' or ''|n}""", ')')
        assert_this('attr=(val)?)', True,
                    """${(val) and 'attr="attr"' or ''|n}""", ')')
        assert_this(
            'attr=(val("test() is a function"))?)', True,
            """${(val("test() is a function")) and 'attr="attr"' or ''|n}""",
            ')')
        assert_this('attr=${val} selected)', True, 'attr="${val}"',
                    ' selected)')
        assert_this('attr=(val) selected)', True, 'attr="${val}"',
                    ' selected)')
        assert_this('attr=val) selected', True, 'attr="${val}"', ') selected')
        assert_this('attr="${\\"val\\"}"?) selected', True, 'attr="${"val"}"',
                    '?) selected')

        assert_this('attr${attr}attr="${\\"val\\"}"?) selected', True,
                    'attr${attr}attr="${"val"}"', '?) selected')