diff --git a/parser/tests.go b/parser/tests.go index 70a5766..e9e8328 100644 --- a/parser/tests.go +++ b/parser/tests.go @@ -38,7 +38,7 @@ func (p *Parser) ParseTest(expr nodes.Expression) (nodes.Expression, error) { } // avoid trying to parse "else" as test arguments if p.CurrentName("else") == nil { - arg, err := p.ParseExpression() + arg, err := p.ParseVariableOrLiteral() if err == nil && arg != nil { test.Args = append(test.Args, arg) } diff --git a/tests/integration/tests_test.go b/tests/integration/tests_test.go index c9ea1a0..8896cda 100644 --- a/tests/integration/tests_test.go +++ b/tests/integration/tests_test.go @@ -69,4 +69,32 @@ var _ = Context("tests", func() { shouldRender("{{ 42 is > 31 }}", "True") shouldFail("{{ 42 is greaterthan(True) }}", "True is not a number") }) + Context("https://github.com/NikolaLohinski/gonja/issues/19", func() { + BeforeEach(func() { + *context = exec.NewContext(map[string]interface{}{ + "var1": "1", + "var2": "3", + }) + }) + shouldRender( + "var1 in ['1', '2'] or (var2 == '3'): {% if var1 in ['1', '2'] or (var2 == '3') %}ok{% endif %}", + "var1 in ['1', '2'] or (var2 == '3'): ok", + ) + shouldRender( + "var1 in (['1'] + ['2']) or (var2 == '3'): {% if var1 in (['1'] + ['2']) or (var2 == '3') %}ok{% endif %}", + "var1 in (['1'] + ['2']) or (var2 == '3'): ok", + ) + shouldRender( + "(var1 in ['1', '2']) or var2 == '3': {% if (var1 in ['1', '2']) or var2 == '3' %}ok{% endif %}", + "(var1 in ['1', '2']) or var2 == '3': ok", + ) + shouldRender( + "(var1 in ['1', '2']) or (var2 == '3'): {% if (var1 in ['1', '2']) or (var2 == '3') %}ok{% endif %}", + "(var1 in ['1', '2']) or (var2 == '3'): ok", + ) + shouldRender( + "var1 in ['1', '2'] or var2 == '3': {% if var1 in ['1', '2'] or var2 == '3' %}ok{% endif %}", + "var1 in ['1', '2'] or var2 == '3': ok", + ) + }) })