class TestCalls(unittest.TestCase): def setUp(self): self.called = False path = os.path.abspath(os.path.dirname(__file__)) self.fs = open_fs(path) self.context = Context() self.context["console"] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize() def test_moya_call_no_lazy(self): """Test moya call without lazy attribute""" self.archive("moya.tests#test_moya_call_no_lazy", self.context, None) self.assert_(self.context.root["called"]) self.assertEqual(self.context[".result"], 123) def test_moya_call_lazy(self): """Test lazy moya calls""" self.archive("moya.tests#test_moya_call_lazy", self.context, None) self.assert_("called" not in self.context.root) self.assertEqual(self.context["result"], 123) self.assert_("called" in self.context.root) self.assert_(self.context.root["called"])
class TestCalls(unittest.TestCase): def setUp(self): self.called = False path = os.path.abspath(os.path.dirname(__file__)) self.fs = fsopendir(path) self.context = Context() self.context['console'] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize() def test_moya_call_no_lazy(self): """Test moya call without lazy attribute""" self.archive('moya.tests#test_moya_call_no_lazy', self.context, None) self.assert_(self.context.root['called']) self.assertEqual(self.context['.result'], 123) def test_moya_call_lazy(self): """Test lazy moya calls""" self.archive('moya.tests#test_moya_call_lazy', self.context, None) self.assert_('called' not in self.context.root) self.assertEqual(self.context['result'], 123) self.assert_('called' in self.context.root) self.assert_(self.context.root['called'])
def setUp(self): path = os.path.abspath(os.path.dirname(__file__)) templates_path = join(path, "templates") self.fs = fsopendir(templates_path) self.archive = Archive() self.archive.init_cache("templates", SettingsContainer.create(type="dict")) self.archive.init_cache("fragment", SettingsContainer.create(type="dict")) self.engine = MoyaTemplateEngine(self.archive, self.fs, {})
def setUp(self): path = os.path.abspath(os.path.dirname(__file__)) self.fs = fsopendir(path) self.context = Context() self.context['console'] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize()
def setUp(self): self.called = False path = os.path.abspath(os.path.dirname(__file__)) self.fs = open_fs(path) self.context = Context() self.context["console"] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize()
class TestContent(unittest.TestCase): def setUp(self): self.called = False path = os.path.abspath(os.path.dirname(__file__)) self.fs = open_fs(path) self.context = Context() self.context['console'] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize() def test_content(self): value = self.archive('moya.tests#test_render_content', self.context, None) self.assertEqual(value, "<strong>bold</strong>") self.archive('moya.tests#test_render_content_2', self.context, None) self.assertEqual(self.context['.html'], "<em>emphasize</em>")
class TestContent(unittest.TestCase): def setUp(self): self.called = False path = os.path.abspath(os.path.dirname(__file__)) self.fs = fsopendir(path) self.context = Context() self.context['console'] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize() def test_content(self): value = self.archive('moya.tests#test_render_content', self.context, None) self.assertEqual(value, "<strong>bold</strong>") self.archive('moya.tests#test_render_content_2', self.context, None) self.assertEqual(self.context['.html'], "<em>emphasize</em>")
class TestTemplates(unittest.TestCase): def setUp(self): path = os.path.abspath(os.path.dirname(__file__)) templates_path = join(path, "templates") self.fs = open_fs(templates_path) self.archive = Archive() self.archive.init_cache("templates", SettingsContainer.create(type="dict")) self.archive.init_cache("fragment", SettingsContainer.create(type="dict")) self.engine = MoyaTemplateEngine(self.archive, self.fs, {}) def tearDown(self): self.fs.close() self.fs = None self.archive = None self.engine = None def _render(self, *template_paths, **kwargs): return self.engine.render(template_paths, kwargs) def test_substitute(self): """Test template substitution""" tests = [(dict(fruit="apple"), "My favorite fruit is apple"), (dict(fruit="pear"), "My favorite fruit is pear"), (dict(), "My favorite fruit is ")] for test_data, result in tests: html = self._render("simplesub.html", **test_data) self.assertEqual(result, html) def test_safe_substitute(self): """Test safe strings""" from moya.render import HTML html = self._render("simplesub.html", fruit="<em>oranges</em>") self.assertEqual(html, "My favorite fruit is <em>oranges</em>") html = self._render("simplesub.html", fruit=HTML("<em>oranges</em>")) self.assertEqual(html, "My favorite fruit is <em>oranges</em>") def test_if(self): """Test template IF tag""" tests = [(dict(fruit="apple"), "I like apples"), (dict(fruit="pear"), "Pears are good"), (dict(), "I don't like fruit")] for test_data, result in tests: html = self._render("if.html", **test_data) self.assertEqual(result, html) def test_for(self): """Test template FOR tag""" fruits = ["apples", "oranges", "carrot", "pears"] tests = [ (dict(fruits=fruits), "I like apples, oranges, pears"), (dict(fruits=[]), "I don't like fruit"), ] for test_data, result in tests: html = self._render("for.html", **test_data) self.assertEqual(result, html) def test_escape(self): """Test HTML escaping""" tests = [ (dict(text="Stuff & things"), "Stuff & things"), (dict(text="<html>"), "<html>"), ] for test_data, result in tests: html = self._render("escape.html", **test_data) self.assertEqual(result, html) def test_extends(self): """Test extending templates""" html = self._render("extends.html", title="Hello") self.assertEqual(html, "<title>Hello</title>") def test_block(self): """Test extending templates""" html = self._render("extendsreplace.html") self.assertEqual(html, "B\n") html = self._render("extendsreplaceexplicit.html") self.assertEqual(html, "B\n") html = self._render("extendsappend.html") self.assertEqual(html, "A\nB\n") html = self._render("extendsprepend.html") self.assertEqual(html, "B\nA\n") def test_def(self): """Test def and call tags in templates""" html = self._render("def.html", fruit="apples") self.assertEqual("I like apples", html) def test_emit(self): """Test emit tag in template""" html = self._render("emit.html") self.assertEqual(html, "{% ${nosubstitute} %}") def test_comments(self): """Test template comments""" html = self._render("comment.html") self.assertEqual(html, "apples") html = self._render("comment2.html") self.assertEqual(html.splitlines()[0].rstrip(), "0 1 3") def test_empty(self): """Test empty template""" html = self._render("empty.html") self.assertEqual(html, "") def test_justtext(self): """Test plain text template""" html = self._render("justtext.html") self.assertEqual(html, "Just\nText") def test_verbatim(self): """Test verbatim tag""" html = self._render("verbatim.html") self.assertEqual("{% for fruit in fruits %}${fruit}{% endfor %}", html) def test_cache(self): """Test cache tag""" html = self._render("cache.html") result_html = "<ul><li>1</li><li>2</li><li>3</li></ul>" self.assertEqual(html, result_html) # A second time so it is read from the cache html = self._render("cache.html") result_html = "<ul><li>1</li><li>2</li><li>3</li></ul>" self.assertEqual(html, result_html) # Sleep so the key expires time.sleep(.1) # Check it once more html = self._render("cache.html") result_html = "<ul><li>1</li><li>2</li><li>3</li></ul>" self.assertEqual(html, result_html) def test_whitespace(self): """Test syntax for whitespace removal""" html = self._render("whitespace.html") self.assertEqual(html, "12345")
class TestLogic(unittest.TestCase): def setUp(self): path = os.path.abspath(os.path.dirname(__file__)) self.fs = fsopendir(path) self.context = Context() self.context['console'] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize() def test_setcontext(self): """Test setting values in the context""" c = self.context setcontext = self.archive.get_callable('moya.tests#setcontext') setcontext(c) self.assertEqual(c['foo'], 1) self.assertEqual(c['bar.baz'], "Hello") self.assertEqual(c['half'], 0.5) self.assertEqual(c['bool'], True) self.assertEqual(c['t'], True) self.assertEqual(c['f'], False) self.assertEqual(c['n'], None) self.assertEqual(c['l'], []) self.assertEqual(c['j'], { "list": [1, 2, 3], "map": dict(foo=10, bar=20) }) self.assertEqual(c['fruit'], ['apples', 'oranges', 'pears']) def test_setcontext_by_value(self): """Test setting values from the 'value' attribute""" #print self.archive.libs['moya.tests'].elements_by_name c = self.context self.archive('moya.tests#setcontextbyvalue', c, None) self.assertEqual(c['foo'], 10) self.assertEqual(c['bar'], 15) self.assertEqual(c['zero'], 0) self.assertEqual(c['empty'], '') self.assertEqual(c['fruit'], 'apple') self.assertEqual(c['grapes'], 'grapegrapegrape') self.assertEqual(c['nograpes'], "'grape'*3") self.assertEqual(c['pi'], 3.14) self.assertEqual(c['check'], True) self.assertEqual(c['check2'], False) self.assertEqual(c['s'], 27) def test_macro(self): """Test macro calling""" self.assertEqual( self.archive('moya.tests#macrotest1', self.context, None), 4) #self.assertEqual(self.context['.returned'], 4) self.assertEqual( self.archive('moya.tests#macroreturnlist', self.context, None), [1, 2, 3]) self.assertEqual( self.archive('moya.tests#testscope1', self.context, None)['b'], 2) self.assertEqual( self.archive('moya.tests#nested', self.context, None, 5), 10) self.assertEqual( self.archive('moya.tests#quadruple', self.context, None, 3), 12) # def test_call(self): # """Test calling Python functions""" # class Obj(object): # def method1(self): # print "method 1 called!" # return "method1 called" # def method2(self, a, b): # return a + b # obj = Obj() # self.assertEqual(self.archive('moya.tests#callabletest1', self.context, obj=obj), # "method1 called") # self.assertEqual(self.archive('moya.tests#callabletest2', self.context, obj=obj), # 20) def test_ifelse(self): """Test if / elif /else""" tests = [(1, "apple"), (2, "orange"), (3, "pear"), (4, "not a fruit"), (5, "not a fruit")] for n, correct in tests: result = self.archive('moya.tests#ifelse', self.context, None, n=n) self.assertEqual(result, correct) def test_bf(self): """Test BF macro""" # Just because is a moderately complex piece of code with lots of loops context = self.context call = self.archive.call result = call('moya.tests#bf', context, None, program=BF_HELLO) self.assertEqual(result, "Hello World!\n")
def test_ifelse(self): """Test if / elif /else""" tests = [(1, "apple"), (2, "orange"), (3, "pear"), (4, "not a fruit"), (5, "not a fruit")] for n, correct in tests: result = self.archive('moya.tests#ifelse', self.context, None, n=n) self.assertEqual(result, correct) def test_bf(self): """Test BF macro""" # Just because is a moderately complex piece of code with lots of loops context = self.context call = self.archive.call result = call('moya.tests#bf', context, None, program=BF_HELLO) self.assertEqual(result, "Hello World!\n") if __name__ == "__main__": fs = fsopendir('../tests') context = Context() archive = Archive() for dirname in fs.listdir(dirs_only=True): import_fs = fs.opendir(dirname) library = archive.load_library(import_fs) print(archive.call('moya.tests#macrotest1', context)) #print archive.call('archivetest#macroreturnlist', context) #print repr(archive.call('archivetest#testscope1', context)) #print archive.call('archivetest#macrotest1', context)
class TestLogic(unittest.TestCase): def setUp(self): path = os.path.abspath(os.path.dirname(__file__)) self.fs = fsopendir(path) self.context = Context() self.context['console'] = Console() self.archive = Archive() import_fs = self.fs.opendir("archivetest") self.archive.load_library(import_fs) self.archive.finalize() def test_setcontext(self): """Test setting values in the context""" c = self.context setcontext = self.archive.get_callable('moya.tests#setcontext') setcontext(c) self.assertEqual(c['foo'], 1) self.assertEqual(c['bar.baz'], "Hello") self.assertEqual(c['half'], 0.5) self.assertEqual(c['bool'], True) self.assertEqual(c['t'], True) self.assertEqual(c['f'], False) self.assertEqual(c['n'], None) self.assertEqual(c['l'], []) self.assertEqual(c['j'], {"list": [1, 2, 3], "map": dict(foo=10, bar=20)}) self.assertEqual(c['fruit'], ['apples', 'oranges', 'pears']) def test_setcontext_by_value(self): """Test setting values from the 'value' attribute""" #print self.archive.libs['moya.tests'].elements_by_name c = self.context self.archive('moya.tests#setcontextbyvalue', c, None) self.assertEqual(c['foo'], 10) self.assertEqual(c['bar'], 15) self.assertEqual(c['zero'], 0) self.assertEqual(c['empty'], '') self.assertEqual(c['fruit'], 'apple') self.assertEqual(c['grapes'], 'grapegrapegrape') self.assertEqual(c['nograpes'], "'grape'*3") self.assertEqual(c['pi'], 3.14) self.assertEqual(c['check'], True) self.assertEqual(c['check2'], False) self.assertEqual(c['s'], 27) def test_macro(self): """Test macro calling""" self.assertEqual(self.archive('moya.tests#macrotest1', self.context, None), 4) #self.assertEqual(self.context['.returned'], 4) self.assertEqual(self.archive('moya.tests#macroreturnlist', self.context, None), [1, 2, 3]) self.assertEqual(self.archive('moya.tests#testscope1', self.context, None)['b'], 2) self.assertEqual(self.archive('moya.tests#nested', self.context, None, 5), 10) self.assertEqual(self.archive('moya.tests#quadruple', self.context, None, 3), 12) # def test_call(self): # """Test calling Python functions""" # class Obj(object): # def method1(self): # print "method 1 called!" # return "method1 called" # def method2(self, a, b): # return a + b # obj = Obj() # self.assertEqual(self.archive('moya.tests#callabletest1', self.context, obj=obj), # "method1 called") # self.assertEqual(self.archive('moya.tests#callabletest2', self.context, obj=obj), # 20) def test_ifelse(self): """Test if / elif /else""" tests = [(1, "apple"), (2, "orange"), (3, "pear"), (4, "not a fruit"), (5, "not a fruit")] for n, correct in tests: result = self.archive('moya.tests#ifelse', self.context, None, n=n) self.assertEqual(result, correct)
# "method1 called") # self.assertEqual(self.archive('moya.tests#callabletest2', self.context, obj=obj), # 20) def test_ifelse(self): """Test if / elif /else""" tests = [(1, "apple"), (2, "orange"), (3, "pear"), (4, "not a fruit"), (5, "not a fruit")] for n, correct in tests: result = self.archive('moya.tests#ifelse', self.context, None, n=n) self.assertEqual(result, correct) if __name__ == "__main__": fs = fsopendir('../tests') context = Context() archive = Archive() for dirname in fs.listdir(dirs_only=True): import_fs = fs.opendir(dirname) library = archive.load_library(import_fs) print(archive.call('moya.tests#macrotest1', context)) #print archive.call('archivetest#macroreturnlist', context) #print repr(archive.call('archivetest#testscope1', context)) #print archive.call('archivetest#macrotest1', context)
from __future__ import print_function import moya.elements from moya.archive import Archive call = Archive.get_callable_from_document("test.xml", "main", default_context=True) result = call() print("Return value:", result)
from __future__ import print_function import moya.elements from moya.archive import Archive call = Archive.get_callable_from_document('test.xml', 'main', default_context=True) result = call() print("Return value:", result)