package jetbrick.template.exec.config;
import java.io.IOException;
import jetbrick.template.exec.AbstractJetxTest;
import jetbrick.template.runtime.JetTagContext;
import org.junit.Assert;
import org.junit.Test;
public class TrimDirectiveWhitespacesTest extends AbstractJetxTest {
@Test
public void testBasic1() {
StringBuilder sb = new StringBuilder();
sb.append("#for(int i:range(1,10))\n");
sb.append(" #if(for.odd) \n");
sb.append("${i}\n");
sb.append(" #end\n");
sb.append("#end");
Assert.assertEquals("1\n3\n5\n7\n9\n", eval(sb.toString()));
}
@Test
public void testBasic2() {
StringBuilder sb = new StringBuilder();
sb.append("#for(int i:range(1,10))\n");
sb.append(" #if(for.odd) \n");
sb.append(" ${i}\n");
sb.append(" #end\n");
sb.append("#end");
Assert.assertEquals(" 1\n 3\n 5\n 7\n 9\n", eval(sb.toString()));
}
@Test
public void testInline1() {
StringBuilder sb = new StringBuilder();
sb.append("===\n");
sb.append("OK=#if(true)OK#end \n");
sb.append("===");
Assert.assertEquals("===\nOK=OK\n===", eval(sb.toString()));
}
@Test
public void testInline2() {
StringBuilder sb = new StringBuilder();
sb.append("===\n");
sb.append("#if(true)OK#end \n");
sb.append("===");
Assert.assertEquals("===\nOK\n===", eval(sb.toString()));
}
@Test
public void testInline3() {
StringBuilder sb = new StringBuilder();
sb.append("===\n");
sb.append("#if(true)OK#end X \n");
sb.append("===");
Assert.assertEquals("===\nOK X \n===", eval(sb.toString()));
}
@Test
public void testInline4() {
StringBuilder sb = new StringBuilder();
sb.append("#for(int i: range(0,3))${i}#end\n");
sb.append("#for(int i: range(0,3))${i}#end\n");
Assert.assertEquals("0123\n0123\n", eval(sb.toString()));
}
@Test
public void testMacroCall() {
StringBuilder sb = new StringBuilder();
sb.append("#macro hello()\n");
sb.append("hello\n");
sb.append("#end\n");
sb.append("#call hello()\n");
sb.append("#call hello()\n");
Assert.assertEquals("hello\nhello\n", eval(sb.toString()));
}
@Test
public void testIncludeCall() {
StringBuilder s = new StringBuilder();
s.append("#include('/sub.jetx')\n");
s.append("#include('/sub.jetx')\n");
engine.set(DEFAULT_MAIN_FILE, s.toString());
s = new StringBuilder();
s.append("123");
engine.set("/sub.jetx", s.toString());
Assert.assertEquals("123\n123\n", eval());
}
@Test
public void testTagCall() {
engine.getGlobalResolver().registerTags(Tags.class);
StringBuilder sb = new StringBuilder();
sb.append("#tag body()\n");
sb.append("123\n");
sb.append("#end\n");
sb.append("#tag body()\n");
sb.append("123\n");
sb.append("#end\n");
Assert.assertEquals("123\n123\n", eval(sb.toString()));
}
static class Tags {
public static void body(JetTagContext ctx) throws IOException {
ctx.invoke();
}
}
}