Exemple #1
0
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"])
Exemple #2
0
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'])
Exemple #3
0
 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, {})
Exemple #4
0
 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()
Exemple #5
0
 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()
Exemple #6
0
 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()
Exemple #7
0
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>")
Exemple #8
0
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 &lt;em&gt;oranges&lt;/em&gt;")

        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 &amp; things"),
            (dict(text="<html>"), "&lt;html&gt;"),
        ]
        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")
Exemple #10
0
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")
Exemple #11
0
    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)
Exemple #12
0
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)
Exemple #13
0
    #                      "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)
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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)