/**
* Copyright (C) 2013-2016 The Rythm Engine project
* for LICENSE and other details see:
* https://github.com/rythmengine/rythmengine
*/
package org.rythmengine.advanced;
import org.rythmengine.Rythm;
import org.rythmengine.TestBase;
import org.rythmengine.extension.ICodeType;
import org.junit.Before;
import org.junit.Test;
import static org.rythmengine.conf.RythmConfigurationKey.*;
import static org.rythmengine.utils.NamedParams.from;
import static org.rythmengine.utils.NamedParams.p;
/**
* Test Natural Template feature
*/
public class NaturalTemplateTest extends TestBase {
@Before
public void configure() {
System.setProperty(FEATURE_NATURAL_TEMPLATE_ENABLED.getKey(), "true");
System.setProperty(FEATURE_TYPE_INFERENCE_ENABLED.getKey(), "true");
System.getProperties().put(DEFAULT_CODE_TYPE_IMPL.getKey(), ICodeType.DefImpl.HTML);
Rythm.shutdown();
}
@Test
public void testBasicDirectives() {
String t = "<!-- @args String name, int age -->Hi @name, happy @age!";
String s = Rythm.render(t, from(p("name", "Green Luo"), p("age", 100)));
assertEquals("Hi Green Luo, happy 100!", s);
t = "<!-- @if (false) {-->false<!-- } else {-->true<!-- }-->";
s = Rythm.render(t);
assertEquals("true", s);
t = "<!-- @for (1..5) {-->@(_)@_sep<!-- } -->";
s = Rythm.render(t);
assertEquals("1,2,3,4", s);
}
@Test
public void testComments() {
String t = "<!-- @// abcde -->";
String s = Rythm.render(t);
assertEquals("", s);
t = "<!-- @* abc\nxyz@abcd\n*@ -->";
s = Rythm.render(t);
assertEquals("", s);
}
@Test
public void testLangSwitch() {
String t = "<!-- @if (true) { --><script>/* @if(true) {*/alert(1);<!-- } --></script><!-- } -->";
String s = Rythm.render(t);
System.setProperty(ENGINE_OUTPUT_JAVA_SOURCE_ENABLED.getKey(), "false");
assertEquals("<script>alert(1);</script>", s);
}
@Test
public void testFeatureDisabled() {
System.setProperty(FEATURE_NATURAL_TEMPLATE_ENABLED.getKey(), "false");
String t = "<!-- @args String name, int age -->Hi @name, happy @age!";
String s = Rythm.render(t, from(p("name", "Green Luo"), p("age", 100)));
assertEquals("<!-- -->Hi Green Luo, happy 100!", s);
t = "<!-- @if (false) {-->false<!-- } else {-->true<!-- }-->";
s = Rythm.render(t);
assertEquals("<!-- -->true<!-- -->", s);
t = "<!-- @for (1..5) {-->@(_)@_sep<!-- } -->";
s = Rythm.render(t);
assertEquals("<!-- -->1,<!-- -->2,<!-- -->3,<!-- -->4<!-- -->", s);
}
public static void main(String[] args) {
run(NaturalTemplateTest.class);
}
}