package org.springmodules.template.engine.freemarker;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.SimpleScalar;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springmodules.template.Template;
import org.springmodules.util.StringResource;
/**
* @author Uri Boness
*/
public class FreemarkerTemplateEngineTests extends TestCase {
private FreemarkerTemplateEngine engine;
private ResourceLoader loader;
private MockControl loaderControl;
protected void setUp() throws Exception {
loaderControl = MockControl.createControl(ResourceLoader.class);
loader = (ResourceLoader) loaderControl.getMock();
engine = new FreemarkerTemplateEngine(loader);
engine.afterPropertiesSet();
}
public void testCreateTemplate() throws Exception {
String encoding = "UTF-8";
Resource resource = new StringResource("Hello ${name}");
Template template = engine.createTemplate(resource, encoding);
Map model = new HashMap();
model.put("name", "Lian");
assertEquals("Hello Lian", template.generate(model));
}
public void testCreateTemplate_WithInclude() throws Exception {
String encoding = "UTF-8";
loaderControl.expectAndReturn(loader.getResource("name_en_US"), null);
loaderControl.expectAndReturn(loader.getResource("name_en"), null);
loaderControl.expectAndReturn(loader.getResource("name"), new StringResource("Hello"));
Resource resource = new StringResource("<#include \"name\">");
loaderControl.replay();
Template template = engine.createTemplate(resource, encoding);
assertEquals("Hello", template.generate(new HashMap()));
loaderControl.verify();
}
public void testCreateConfiguration() throws Exception {
Properties settings = new Properties();
settings.setProperty("tag_syntax", "auto_detect");
Map vars = new HashMap();
vars.put("name", "value");
Configuration conf = FreemarkerTemplateEngine.createConfiguration(loader, settings, vars);
TemplateLoader templateLoader = conf.getTemplateLoader();
assertTrue(ResourceLoaderTemplateLoader.class.isInstance(templateLoader));
ResourceLoaderTemplateLoader resourceLoaderTemplateLoader = (ResourceLoaderTemplateLoader) templateLoader;
assertSame(loader, resourceLoaderTemplateLoader.getResourceLoader());
assertEquals(6, conf.getSharedVariableNames().size());
assertEquals("value", ((SimpleScalar) conf.getSharedVariable("name")).getAsString());
assertEquals(Configuration.AUTO_DETECT_TAG_SYNTAX, conf.getTagSyntax());
}
}