From 7f7fa2f91467fdb2b11312be8562e7b51fdeb199 Mon Sep 17 00:00:00 2001
From: Sebastian Koslowski <sebastian.koslowski@gmail.com>
Date: Tue, 3 May 2016 17:13:08 +0200
Subject: grc: added yaml/mako support

Includes basic converter from XML/Cheetah to YAML/Mako based block format.
---
 grc/tests/test_cheetah_converter.py | 132 ++++++++++++++++++++++++++++++++++++
 1 file changed, 132 insertions(+)
 create mode 100644 grc/tests/test_cheetah_converter.py

(limited to 'grc/tests/test_cheetah_converter.py')

diff --git a/grc/tests/test_cheetah_converter.py b/grc/tests/test_cheetah_converter.py
new file mode 100644
index 0000000000..7999955436
--- /dev/null
+++ b/grc/tests/test_cheetah_converter.py
@@ -0,0 +1,132 @@
+""""""
+
+import functools
+import grc.converter.cheetah_converter as parser
+
+
+def test_basic():
+    c = parser.Converter(names={'abc'})
+    for convert in (c.convert_simple, c.convert_hard, c.to_python):
+        assert 'abc' == convert('$abc')
+        assert 'abc' == convert('$abc()')
+        assert 'abc' == convert('$(abc)')
+        assert 'abc' == convert('$(abc())')
+        assert 'abc' == convert('${abc}')
+        assert 'abc' == convert('${abc()}')
+
+    assert c.stats['simple'] == 2 * 6
+    assert c.stats['hard'] == 1 * 6
+
+
+def test_simple():
+    convert = parser.Converter(names={'abc': {'def'}})
+    assert 'abc' == convert.convert_simple('$abc')
+    assert 'abc.def' == convert.convert_simple('$abc.def')
+    assert 'abc.def' == convert.convert_simple('$(abc.def)')
+    assert 'abc.def' == convert.convert_simple('${abc.def}')
+    try:
+        convert.convert_simple('$abc.not_a_sub_key')
+    except NameError:
+        assert True
+    else:
+        assert False
+
+
+def test_conditional():
+    convert = parser.Converter(names={'abc'})
+    assert '(asb_asd_ if abc > 0 else __not__)' == convert.convert_inline_conditional(
+        '#if $abc > 0 then asb_$asd_ else __not__')
+
+
+def test_simple_format_string():
+    convert = functools.partial(parser.Converter(names={'abc'}).convert_simple, spec=parser.FormatString)
+    assert '{abc}' == convert('$abc')
+    assert '{abc:eval}' == convert('$abc()')
+    assert '{abc}' == convert('$(abc)')
+    assert '{abc:eval}' == convert('$(abc())')
+    assert '{abc}' == convert('${abc}')
+    assert '{abc:eval}' == convert('${abc()}')
+
+
+def test_hard_format_string():
+    names = {'abc': {'ff'}, 'param1': {}, 'param2': {}}
+    convert = functools.partial(parser.Converter(names).convert_hard, spec=parser.FormatString)
+    assert 'make_a_cool_block_{abc.ff}({param1}, {param2})' == \
+           convert('make_a_cool_block_${abc.ff}($param1, $param2)')
+
+
+converter = parser.Converter(names={'abc'})
+c2p = converter.to_python
+
+
+def test_opts():
+    assert 'abc abc abc' == c2p('$abc $(abc) ${abc}')
+    assert 'abc abc.abc abc' == c2p('$abc $abc.abc ${abc}')
+    assert 'abc abc[''].abc abc' == c2p('$abc $abc[''].abc() ${abc}')
+
+
+def test_nested():
+    assert 'abc(abc) abc + abc abc[abc]' == c2p('$abc($abc) $(abc + $abc) ${abc[$abc]}')
+    assert '(abc_abc_)' == c2p('(abc_$(abc)_)')
+
+
+def test_nested2():
+    class Other(parser.Python):
+        nested_start = '{'
+        nested_end = '}'
+    assert 'abc({abc})' == converter.convert('$abc($abc)', spec=Other)
+
+
+def test_nested3():
+    class Other(parser.Python):
+        start = '{'
+        end = '}'
+    assert '{abc(abc)}' == converter.convert('$abc($abc)', spec=Other)
+
+
+def test_with_string():
+    assert 'abc "$(abc)" abc' == c2p('$abc "$(abc)" ${abc}')
+    assert 'abc \'$(abc)\' abc' == c2p('$abc \'$(abc)\' ${abc}')
+    assert 'abc "\'\'$(abc)" abc' == c2p('$abc "\'\'$(abc)" ${abc}')
+
+
+def test_if():
+    result = converter.to_mako("""
+        #if $abc > 0
+            test
+        #else if $abc < 0
+            test
+        #else
+            bla
+        #end if
+    """)
+
+    expected = """
+        % if abc > 0:
+            test
+        % elif abc < 0:
+            test
+        % else:
+            bla
+        % endif
+    """
+    assert result == expected
+
+
+def test_hash_end():
+    result = converter.to_mako('$abc#slurp')
+    assert result == '${abc}\\'
+
+
+def test_slurp_if():
+    result = converter.to_mako("""
+        $abc#slurp
+        #if $abc
+    """)
+
+    expected = """
+        ${abc}
+        % if abc:
+    """
+    assert result == expected
+
-- 
cgit v1.2.3