def test_complex2(self): loader = MemLoader({ "base.html": """ <html> <header> <title><%block title%><% end %></title> <body><%block body%><% end %></body> </header> </html> """, "minibase.html": """ <% extends base.html %> <% block title %>首页<% end %> """, "index.html": """ <% extends minibase.html %> <% block body %>主体<% end %> """, }) r = loader.load('index.html').render(users=self.users) self.assertEqual(''.join(""" <html> <header> <title>首页</title> <body>主体</body> </header> </html> """.split()), ''.join(r.split()))
def test_should_ignore_not_block_tag_if_template_is_extends(self): loader = MemLoader({ "base.html": "<title><% block title %><% end %></title>", "index.html": "<% extends base.html %><p>文本是要忽略的</p><% block title %><b>标题要保留</b><% end %>", }) self.assertEqual('<title><b>标题要保留</b></title>', loader.load("index.html").render())
def test_block_cover(self): loader = MemLoader({ "base.html": "开始<% block title%>标题<% end %><% block body%>主体<% end %>结束", "index.html": """ <% extends base.html %><% block title%>真正的标题<% end %><% block body%>真正的主体<% end %>""", }) self.assertEqual(' 开始真正的标题真正的主体结束', loader.load("index.html").render())
def test_error_if_block_not_end(self): loader = MemLoader({ 'base.html': '<% block title %>标题文本', "index.html": '<% extends base.html %>' }) with self.assertRaises(FormatError) as err: loader.load('index.html').render() self.assertEqual( "Missing '<% end %>' for '<% block title %>' on base.html at line 1", str(err.exception))
def test_include_with_customer_variable(self): loader = MemLoader({ "index.html": "<ul><% include _partial.html members=users %></ul>", "_partial.html": """<% for m in members %><li><%= m.name %>|<%= m.age %></li><% end %>""", }) t = loader.load('index.html') r = t.render(users=self.users) self.assertEqual("<ul><li>露西|20</li><li>Lily|10</li></ul>", r)
def test_include(self): loader = MemLoader({ "index.html": "<ul><% include _partial.html %></ul>", "_partial.html": """<% for u in users %><li><%= u.name %>|<%= u.age %></li><% end %>""", }) t = loader.load('index.html') r = t.render(users=self.users) self.assertEqual("<ul><li>露西|20</li><li>Lily|10</li></ul>", r)
def test_parse_include_error_if_has_a_not_exist_fname(self): loader = MemLoader({ "index.html": "<ul><% include not_exist.html %></ul>", "_partial.html": """<% for m in members %><li><%= m.name %>|<%= m.age %></li><% end %>""", }) with self.assertRaises(FormatError) as err: loader.load('index.html').render(users=self.users) self.assertEqual("not_exist.html is not exist on index.html at line 1", str(err.exception))
def test_parse_extends_error_if_not_has_fname(self): loader = MemLoader({ "base.html": "开始<% block title%>标题<% end %><% block body%>主体<% end %>结束", "index.html": """<% extends %><% block title%>真正的标题<% end %><% block body%>真正的主体<% end %> """, }) with self.assertRaises(FormatError) as err: loader.load('index.html').render() self.assertEqual( "Missing template file path for '<% extends %>' on index.html at line 1", str(err.exception))
def test_complex3(self): loader = MemLoader({ "base.html": """ <html> <header> <title><%block title%><% end %></title> <body><%block body%><% end %></body> </header> </html> """, "minibase.html": """ <% extends base.html %> <% block title %>首页<% end %> """, "index.html": """ <% extends minibase.html %> <% block title %>首页<% end %> <% block body %><% include user_body.html %><% end %> """, "user_body_base.html": """ <ul> <% block users %> <% end %> </ul> """, "user_body.html": """ <% extends user_body_base.html %> <% block users %> <% for u in users%> <% include user.html %> <% end %> <% end %> """, "user.html": """<li><%= u.name %>|<%= u.age %></li>""" }) r = loader.load('index.html').render(users=self.users) self.assertEqual(''.join(""" <html> <header> <title>首页</title> <body> <ul> <li>露西|20</li> <li>Lily|10</li> </ul> </body> </header> </html> """.split()), ''.join(r.split()))
def test_parse_extends_error_if_extends_does_not_begin_of_template_content( self): loader = MemLoader({ "base.html": "开始<% block title%>标题<% end %><% block body%>主体<% end %>结束", "index.html": """extends前面有内容是要出错的 <% extends base.html%>""", }) with self.assertRaises(FormatError) as err: loader.load('index.html').render() self.assertEqual( "'<% extends base.html %>' must begin of the template content on index.html at line 2", str(err.exception))
def test_mem_load_build_path(self): self.assertEqual( "parent.html", MemLoader({ "parent.html": "aaaaaa" }).build_path("parent.html"))