package org.bndtools.templating.engine.mustache;
import static org.junit.Assert.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bndtools.templating.FolderResource;
import org.bndtools.templating.ResourceMap;
import org.bndtools.templating.StringResource;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.junit.Test;
import aQute.lib.io.IO;
public class MustacheTemplateEngineTest {
@Test
public void testBasic() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("{{srcDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/package-info.java", new StringResource("package {{packageName}};"));
Map<String,List<Object>> params = new HashMap<>();
params.put("srcDir", Collections.<Object> singletonList("src"));
params.put("packageDir", Collections.<Object> singletonList("org/example/foo"));
params.put("packageName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap output = engine.generateOutputs(input, params, new NullProgressMonitor());
assertEquals(3, output.size());
assertEquals("package org.example.foo;", IO.collect(output.get("src/org/example/foo/package-info.java").getContent()));
}
@Test
public void testIgnore() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("_template.properties", new StringResource("ignore=*/donotcopy.*"));
input.put("{{srcDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/package-info.java", new StringResource("package {{packageName}};"));
input.put("{{srcDir}}/{{packageDir}}/donotcopy.txt", new StringResource(""));
Map<String,List<Object>> params = new HashMap<>();
params.put("srcDir", Collections.<Object> singletonList("src"));
params.put("packageDir", Collections.<Object> singletonList("org/example/foo"));
params.put("packageName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap output = engine.generateOutputs(input, params, new NullProgressMonitor());
assertEquals(3, output.size());
assertEquals("package org.example.foo;", IO.collect(output.get("src/org/example/foo/package-info.java").getContent()));
assertNull(output.get("src/org/example/foo/donotcopy.txt"));
}
@Test
public void testNoProcessDefaultPattern() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("{{srcDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/package-info.java", new StringResource("package {{packageName}};"));
input.put("{{srcDir}}/{{packageDir}}/package-info.jpg", new StringResource("package {{packageName}};"));
Map<String,List<Object>> params = new HashMap<>();
params.put("srcDir", Collections.<Object> singletonList("src"));
params.put("packageDir", Collections.<Object> singletonList("org/example/foo"));
params.put("packageName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap output = engine.generateOutputs(input, params, new NullProgressMonitor());
assertEquals(4, output.size());
assertEquals("package org.example.foo;", IO.collect(output.get("src/org/example/foo/package-info.java").getContent()));
assertEquals("package {{packageName}};", IO.collect(output.get("src/org/example/foo/package-info.jpg").getContent()));
}
@Test
public void testNoProcessExtendedPattern() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("_template.properties", new StringResource("process.before=!*.java"));
input.put("{{srcDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/", new FolderResource());
input.put("{{srcDir}}/{{packageDir}}/package-info.java", new StringResource("package {{packageName}};"));
Map<String,List<Object>> params = new HashMap<>();
params.put("srcDir", Collections.<Object> singletonList("src"));
params.put("packageDir", Collections.<Object> singletonList("org/example/foo"));
params.put("packageName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap output = engine.generateOutputs(input, params, new NullProgressMonitor());
assertEquals(3, output.size());
assertEquals("package {{packageName}};", IO.collect(output.get("src/org/example/foo/package-info.java").getContent()));
}
@Test
public void testAlternativeDelimiters() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("readme.txt", new StringResource("{{=\u00ab \u00bb=}}Unprocessed: {{packageName}}. Processed: \u00abpackageName\u00bb"));
Map<String,List<Object>> params = new HashMap<>();
params.put("packageName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap output = engine.generateOutputs(input, params, new NullProgressMonitor());
assertEquals(1, output.size());
assertEquals("Unprocessed: {{packageName}}. Processed: org.example.foo", IO.collect(output.get("readme.txt").getContent()));
}
@Test
public void testAlternativeDelimiters2() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("_template.properties", new StringResource("leftDelim=_\nrightDelim=_"));
input.put("readme.txt", new StringResource("Unprocessed: {{packageName}}. Processed: _packageName_"));
Map<String,List<Object>> params = new HashMap<>();
params.put("packageName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap output = engine.generateOutputs(input, params, new NullProgressMonitor());
assertEquals(1, output.size());
assertEquals("Unprocessed: {{packageName}}. Processed: org.example.foo", IO.collect(output.get("readme.txt").getContent()));
}
@Test
public void testGetParamNames() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("readme.txt", new StringResource("Blah {{fish}} blah {{battleship}} blah {{antidisestablishmentarianism}}"));
Map<String,String> params = engine.getTemplateParameters(input, new NullProgressMonitor());
assertTrue(params.containsKey("fish"));
assertTrue(params.containsKey("battleship"));
assertTrue(params.containsKey("antidisestablishmentarianism"));
}
@Test
public void testGetDefaults() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("_defaults.properties", new StringResource("fish=carp\nbattleship=potemkin"));
input.put("readme.txt", new StringResource("Blah {{fish}} blah {{battleship}} blah {{antidisestablishmentarianism}}"));
Map<String,String> params = engine.getTemplateParameters(input, new NullProgressMonitor());
assertEquals("carp", params.get("fish"));
assertEquals("potemkin", params.get("battleship"));
assertNull(params.get("antidisestablishmentarianism"));
}
@Test
public void testApplyDefaults() throws Exception {
MustacheTemplateEngine engine = new MustacheTemplateEngine();
ResourceMap input = new ResourceMap();
input.put("_defaults.properties", new StringResource("fish=carp\nbattleship=potemkin\nantidisestablishmentarianism=bigword"));
input.put("readme.txt", new StringResource("Blah {{fish}} blah {{battleship}} blah {{antidisestablishmentarianism}}"));
ResourceMap outputs = engine.generateOutputs(input, new HashMap<String,List<Object>>(), new NullProgressMonitor());
assertEquals(1, outputs.size());
assertEquals("Blah carp blah potemkin blah bigword", IO.collect(outputs.get("readme.txt").getContent()));
}
}