예제 #1
0
 def test_tree_children_of_childless_node(self):
   source = (
       '%hr\n'
       '  text\n'
       )
   with self.assertRaises(TemplateSyntaxError):
     Parser.build_tree(source)
예제 #2
0
  def test_jinja_variables(self):
    source = '#{var} #{var2}'
    lines = Parser.get_source_lines(source)
    self.assertEquals(['{{ var }} {{ var2 }}'], lines)

    source = '%hr(class="#{class}")'
    lines = Parser.get_source_lines(source)
    self.assertEqual(['%hr(class="{{ class }}")'], lines)
예제 #3
0
 def test_invalid_indentation(self):
   source = (
       '%div\n'
       '  f\n'
       ' f\n'
       '       f\n'
       '    f\n'
       )
   with self.assertRaises(TemplateIndentationError):
     Parser.build_tree(source)
 def test_jinja_line(self):
   line = '-extends "base.haml"'
   node = Parser.parse_line(line)
   self.assertIsInstance(node, nodes.JinjaNode)
   self.assertEqual('extends', node.tag)
   self.assertEqual('"base.haml"', node.data)
   self.assertFalse(node.has_children())
 def test_shortcut_class(self):
   line = '.cls'
   node = Parser.parse_line(line)
   self.assertIsInstance(node, nodes.HtmlNode)
   self.assertFalse(node.has_children())
   self.assertEqual('div', node.tag)
   self.assertEqual({'class': 'cls'}, node.attributes)
 def test_shortcut_id(self):
   line = '#myid'
   node = Parser.parse_line(line)
   self.assertIsInstance(node, nodes.HtmlNode)
   self.assertFalse(node.has_children())
   self.assertEqual('div', node.tag)
   self.assertEqual({'id': 'myid'}, node.attributes)
 def test_single_html_tag(self):
     line = '%div'
     node = Parser.parse_line(line)
     self.assertFalse(node.has_children())
     self.assertIsInstance(node, nodes.HtmlNode)
     self.assertEqual('div', node.tag)
     self.assertEqual({}, node.attributes)
 def test_shortcut_class(self):
     line = '.cls'
     node = Parser.parse_line(line)
     self.assertIsInstance(node, nodes.HtmlNode)
     self.assertFalse(node.has_children())
     self.assertEqual('div', node.tag)
     self.assertEqual({'class': 'cls'}, node.attributes)
 def test_shortcut_id(self):
     line = '#myid'
     node = Parser.parse_line(line)
     self.assertIsInstance(node, nodes.HtmlNode)
     self.assertFalse(node.has_children())
     self.assertEqual('div', node.tag)
     self.assertEqual({'id': 'myid'}, node.attributes)
 def test_jinja_line(self):
     line = '-extends "base.haml"'
     node = Parser.parse_line(line)
     self.assertIsInstance(node, nodes.JinjaNode)
     self.assertEqual('extends', node.tag)
     self.assertEqual('"base.haml"', node.data)
     self.assertFalse(node.has_children())
예제 #11
0
 def test_single_html_tag(self):
   line = '%div'
   node = Parser.parse_line(line)
   self.assertFalse(node.has_children())
   self.assertIsInstance(node, nodes.HtmlNode)
   self.assertEqual('div', node.tag)
   self.assertEqual({}, node.attributes)
예제 #12
0
 def test_tree_jinja_tag_for(self):
   source = (
       '-for item in list\n'
       '  item\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% for item in list %}', 'item', '{% endfor %}'], lines)
예제 #13
0
 def test_tree_jinja_tags_self_closing(self):
   source = (
       '-extends "base.haml"\n'
       'text\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% extends "base.haml" %}', 'text'], lines)
예제 #14
0
 def test_line_continuation(self):
   source = (
       '%div(a="1", \\\n'
       '     b="2")\n'
       '  text\n'
       )
   lines = Parser.get_source_lines(source)
   self.assertEqual(3, len(lines))
   self.assertEqual(['%div(a="1", b="2")', '', '  text'], lines)
예제 #15
0
  def test_tree_text_with_html_child(self):
    source = (
        'text on base line\n'
        '  %div\n'
        )

    tree = Parser.build_tree(source)
    lines = tree.render_lines()
    self.assertEqual(['text on base line', '<div>', '</div>'], lines)
예제 #16
0
 def test_line_continuation_indented_properly(self):
   source = (
       '%div\n'
       '  %p(a="1", \\ \n'
       '     b="2")\n'
       '    Text\n'
       )
   lines = Parser.get_source_lines(source)
   self.assertEqual(['%div', '  %p(a="1", b="2")', '', '    Text'], lines)
예제 #17
0
 def test_tree_text_with_unusual_indentation(self):
   source = (
       'text on base line\n'
       '  indented for no good reason\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['text on base line', 'indented for no good reason'],
                    lines)
예제 #18
0
 def test_comment(self):
   source = (
       '%div\n'
       '; comment\n'
       '  text\n'
       )
   lines = Parser.get_source_lines(source)
   self.assertEqual(3, len(lines))
   self.assertEqual(['%div', '', '  text'], lines)
예제 #19
0
  def test_single_child(self):
    source = ('%div')
    tree = Parser.build_tree(source)
    self.assertTrue(tree.has_children())
    self.assertEqual(1, len(tree.get_children()))

    node = tree.get_children()[0]
    self.assertIsInstance(node, nodes.HtmlNode)
    self.assertEqual('div', node.tag)
    self.assertEqual({}, node.attributes)
예제 #20
0
 def test_tree_raw_jinja_tag_with_a_div(self):
   source = (
       '{% if True %}\n'
       '  %div true text\n'
       '{% endif %}\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% if True %}', '<div>', 'true text', '</div>',
                     '{% endif %}'], lines)
예제 #21
0
 def test_tree_jinja_tags_empty(self):
   source = (
       '-for item in list\n'
       '-if True\n'
       'top\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% for item in list %}', '{% endfor %}',
                     '{% if True %}', '{% endif %}', 'top'], lines)
예제 #22
0
 def test_tree_text(self):
   source = (
       '%div\n'
       '  text\n'
       '  text2\n'
       'top level text\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['<div>', 'text', 'text2', '</div>', 'top level text'],
                    lines)
예제 #23
0
 def test_tree_jinja_tag_if_else(self):
   source = (
       '-if True\n'
       '  %div true\n'
       '-else\n'
       '  %div false\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% if True %}', '<div>', 'true', '</div>', '{% else %}',
                     '<div>', 'false', '</div>', '{% endif %}'], lines)
예제 #24
0
  def test_basic(self):
    source = (
        '%div\n'
        '  text\n'
        '%p\n'
        '  %p\n'
        '    nested-text\n'
        )

    lines = Parser.get_source_lines(source)
    self.assertEqual(['%div', '  text', '%p', '  %p', '    nested-text'],
                     lines)
예제 #25
0
 def test_tree_nested(self):
   source = (
       '%div(a="1", \\ \n'
       '     b="2")\n'
       '  %h1 heading 1\n'
       '  %p: %span: %b bold nested\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['<div a="1" b="2">', '<h1>', 'heading 1', '</h1>', '<p>',
                     '<span>', '<b>', 'bold nested', '</b>', '</span>',
                     '</p>', '</div>'], lines)
예제 #26
0
 def test_tree_special_block_tag_javascript(self):
   source = (
       ':javascript\n'
       '  ..\n'
       '    .###.1\n'
       '%div content\n'
       )
   tree = Parser.build_tree(source)
   self.assertIsInstance(tree, nodes.Node)
   lines = tree.render_lines()
   self.assertEqual(['<script type="text/javascript">', '..', '.###.1',
                     '</script>', '<div>', 'content', '</div>'], lines)
예제 #27
0
  def test_single_line_continuation(self):
    source = (
        '%div(a="1", \\ \n'
        '     b="2")\n'
        )
    tree = Parser.build_tree(source)
    self.assertTrue(tree.has_children())
    self.assertEqual(1, len(tree.get_children()))

    node = tree.get_children()[0]
    self.assertIsInstance(node, nodes.HtmlNode)
    self.assertEqual('div', node.tag)
    self.assertEqual({'a': '1', 'b': '2'}, node.attributes)
예제 #28
0
 def test_line_continuation_in_if_statement(self):
   source = (
       '-if True\n'
       '  %link(a="1", \\\n'
       '        b="2")\n'
       '  %script(c="3")\n'
       '-else\n'
       '  %link(d="4")\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% if True %}', '<link a="1" b="2" />',
                     '<script c="3">','</script>', '{% else %}',
                     '<link d="4" />', '{% endif %}'], lines)
예제 #29
0
  def test_inline_content(self):
    source = '%div.cls inline content'
    tree = Parser.build_tree(source)
    self.assertEqual(1, len(tree.get_children()))

    node = tree.get_children()[0]
    self.assertIsInstance(node, nodes.HtmlNode)
    self.assertEqual('div', node.tag)
    self.assertEqual({'class': 'cls'}, node.attributes)

    self.assertEqual(1, len(node.get_children()))
    text_node = node.get_children()[0]
    self.assertIsInstance(text_node, nodes.TextNode)
    self.assertEqual('inline content', text_node.data)
예제 #30
0
 def test_tree_jinja_tag_if_elif_elif_else(self):
   source = (
       '-if 1\n'
       '  1\n'
       '-elif 2\n'
       '  2\n'
       '-elif 3\n'
       '  3\n'
       '-else\n'
       '  4\n'
       )
   tree = Parser.build_tree(source)
   lines = tree.render_lines()
   self.assertEqual(['{% if 1 %}', '1', '{% elif 2 %}', '2', '{% elif 3 %}',
                     '3', '{% else %}', '4', '{% endif %}'], lines)
예제 #31
0
 def test_tree_jinja_tag_followed_by_html_tag(self):
   source = (
       '%html\n'
       '  -for item in items\n'
       '    #{item}\n'
       '  -else\n'
       '    Empty\n'
       '  %div(a="1", \\ \n'
       '       b="2")\n'
       )
   tree = Parser.build_tree(source)
   self.assertIsInstance(tree, nodes.Node)
   lines = tree.render_lines()
   self.assertEqual(['<html>', '{% for item in items %}', '{{ item }}',
                     '{% else %}', 'Empty', '{% endfor %}',
                     '<div a="1" b="2">', '</div>', '</html>'], lines)
예제 #32
0
 def __init__(self, source, newline_string=None, indent_string=None):
   self.parser = Parser(source)
   self.newline_string = newline_string or ''
   self.indent_string = indent_string or ''
 def test_empty(self):
   self.assertEqual(0, Parser.get_indent_level(''))
 def test_mixed_tabs_and_spaces_raises_error(self):
   with self.assertRaises(ValueError):
     Parser.get_indent_level('  \t  %div')
 def test_whitespace_only(self):
   # get_source_lines should strip these, but get_indent_level respects
   # whitespace-only lines.
   self.assertEqual(4, Parser.get_indent_level('    '))
예제 #36
0
 def test_parser_stores_source_text(self):
     parser = Parser('%div')
     self.assertEqual('%div', parser.source)
예제 #37
0
 def test_parser_builds_tree_on_init(self):
     parser = Parser('')
     self.assertIsInstance(parser.tree, nodes.Node)