/**********************************************************************
Copyright (c) 2014 HubSpot Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
**********************************************************************/
package com.hubspot.jinjava.lib.tag;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.hubspot.jinjava.Jinjava;
import com.hubspot.jinjava.interpret.InterpretException;
import com.hubspot.jinjava.interpret.RenderResult;
import com.hubspot.jinjava.interpret.TemplateError.ErrorReason;
public class TagTest {
Jinjava jinjava;
String script;
Map<String, Object> bindings;
Object res;
@Before
public void setup() {
jinjava = new Jinjava();
bindings = new HashMap<>();
bindings.put("var1", new Integer[] { 23, 45, 45, 689 });
bindings.put("var2", "45");
bindings.put("var3", 12);
bindings.put("var5", "");
}
@Test
public void forTag() {
script = "{% for item in var1 %}{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("234545689", res);
}
@Test
public void forTag1() {
script = "{% for %}{{item}}{% endfor%}";
RenderResult r = jinjava.renderForResult(script, bindings);
assertThat(r.getErrors()).hasSize(1);
assertThat(r.getErrors().get(0).getReason()).isEqualTo(ErrorReason.SYNTAX_ERROR);
}
@Test
public void forLoop() {
script = "{% for item in var1 %}{{loop.first}}{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("true23false45false45false689", res);
}
@Test
public void forLoop1() {
script = "{% for item in var1 %}{{loop.last}}{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("false23false45false45true689", res);
}
@Test
public void forLoop2() {
script = "{% for item in var1 %}{{loop.index0}}-{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("0-231-452-453-689", res);
}
@Test
public void forLoop3() {
script = "{% for item in var1 %}{{loop.counter}}-{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("1-232-453-454-689", res);
}
@Test
public void forLoop4() {
script = "{% for item in var1 %}{{loop.revindex0}}-{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("3-232-451-450-689", res);
}
@Test
public void forLoop5() {
String s = "{% for item in var2|list %}<li>{{ item }}</li>{% endfor %}";
res = jinjava.render(s, bindings);
assertEquals("<li>4</li><li>5</li>", res);
}
@Test
public void reverseFor() {
script = "{% for item in var1|reverse %}{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("689454523", res);
}
@Test
public void ifchangedFor() {
script = "{% for item in var1|reverse %}{%ifchanged item%}{{item}}{%endifchanged%}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("6894523", res);
}
@Test
public void cycleFor() {
script = "{% for item in var1 %}{% cycle 'a','b','c'%}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("abca", res);
}
@Test
public void cycleFor0() {
script = "{% for item in var1 %}{% cycle var3,var2,'hello'%}{{item}}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("12234545hello4512689", res);
}
@Test
public void cycleFor1() {
script = "{% cycle 'a','b','c' as d%}{% for item in var1 %}{%cycle d%}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("abca", res);
}
@Test
public void cycleFor2() {
script = "{% cycle var3,var2,'hello' as d%}{% for item in var1 %}{%cycle d%}{% endfor%}";
res = jinjava.render(script, bindings);
assertEquals("1245hello12", res);
}
@Test
public void cycle() {
script = "{% cycle var3,var2,'hello'%}";
res = jinjava.render(script, bindings);
assertEquals("12", res);
}
@Test
public void ifTag() {
script = "{%if var1 %}hello{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("hello", res);
}
@Test
public void ifTag0() {
script = "{%if var4 %}hello{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("", res);
}
@Test
public void ifTag1() {
script = "{%if var5 %}hello{%else%}world{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("world", res);
}
@Test
public void ifTag2() {
script = "{%if var2 == 45 %}hello{%else%}world{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("hello", res);
}
@Test
public void ifTag3() {
script = "{%if var3 == '12' %}hello{%else%}world{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("hello", res);
}
@Test
public void ifTag6() {
script = "{%if var1 and var5 %}hello{%else%}world{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("world", res);
}
@Test
public void ifTag7() {
script = "{%if var1 or var5 %}hello{%else%}world{%endif%}";
res = jinjava.render(script, bindings);
assertEquals("hello", res);
}
@Test
public void ifTag8() {
script = "{%if %}hello{%else%}world{%endif%}";
RenderResult r = jinjava.renderForResult(script, bindings);
assertThat(r.getErrors()).hasSize(1);
assertThat(r.getErrors().get(0).getReason()).isEqualTo(ErrorReason.SYNTAX_ERROR);
}
@Test
public void echo1() {
script = "{{ }}";
res = jinjava.render(script, bindings);
assertEquals("", res);
}
@Test
public void echo2() {
script = "{{ _ }}";
res = jinjava.render(script, bindings);
assertEquals("", res);
}
@Test(expected = InterpretException.class)
public void block() {
script = "{%block %}";
res = jinjava.render(script, bindings);
assertEquals("", res);
}
@Test(expected = InterpretException.class)
public void block1() {
script = "{%block a %}";
res = jinjava.render(script, bindings);
assertEquals("", res);
}
}