package org.bndtools.core.templating.repobased;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.bndtools.templating.Resource;
import org.bndtools.templating.ResourceMap;
import org.bndtools.templating.Template;
import org.bndtools.templating.engine.st.StringTemplateEngine;
import org.bndtools.utils.progress.ProgressMonitorReporter;
import org.eclipse.core.runtime.NullProgressMonitor;
import aQute.bnd.build.Run;
import aQute.lib.hex.Hex;
import aQute.lib.io.IO;
import junit.framework.TestCase;
@SuppressWarnings("restriction")
public class ReposTemplateLoaderTest extends TestCase {
private ReposTemplateLoader loader;
@Override
protected void setUp() throws Exception {
Run project = Run.createRun(null, IO.getFile("testdata/ws.bndrun"));
loader = new ReposTemplateLoader();
loader.workspace = project.getWorkspace();
loader.activate();
Map<String,Object> engineProps = new HashMap<>();
engineProps.put("name", "stringtemplate");
loader.addTemplateEngine(new StringTemplateEngine(), engineProps);
}
public void testLoad() throws Exception {
List<Template> templates = loader.findTemplates("test1", new ProgressMonitorReporter(new NullProgressMonitor(), "")).getValue();
assertEquals(1, templates.size());
Template template = templates.get(0);
assertEquals("Hello", template.getName());
assertEquals(0, template.getRanking());
assertNull(template.getCategory());
}
public void testProcessTemplate() throws Exception {
List<Template> templates = loader.findTemplates("test1", new ProgressMonitorReporter(new NullProgressMonitor(), "")).getValue();
assertEquals(1, templates.size());
Template template = templates.get(0);
Map<String,List<Object>> parameters = new HashMap<>();
parameters.put("projectName", Collections.<Object> singletonList("org.example.foo"));
parameters.put("srcDir", Collections.<Object> singletonList("src/main/java"));
parameters.put("basePackageDir", Collections.<Object> singletonList("org/example/foo"));
ResourceMap outputs = template.generateOutputs(parameters);
assertEquals(5, outputs.size());
Entry<String,Resource> entry;
Iterator<Entry<String,Resource>> iter = outputs.entries().iterator();
entry = iter.next();
assertEquals("src/main/java/org/example/foo/Activator.java", entry.getKey());
assertEquals("package org.example.foo; public class Activator {}", IO.collect(entry.getValue().getContent()));
entry = iter.next();
assertEquals("pic.jpg", entry.getKey());
// Check the digest of the pic to ensure it didn't get damaged by the templating engine
DigestInputStream digestStream = new DigestInputStream(entry.getValue().getContent(), MessageDigest.getInstance("SHA-256"));
IO.drain(digestStream);
byte[] digest = digestStream.getMessageDigest().digest();
assertEquals("ea5d770bc2deddb1f9a20df3ad337bdc1490ba7b35fa41c33aa4e9a534e82ada", Hex.toHexString(digest).toLowerCase());
entry = iter.next();
assertEquals("src/main/java/", entry.getKey());
entry = iter.next();
assertEquals("src/main/java/org/example/foo/", entry.getKey());
entry = iter.next();
assertEquals("bnd.bnd", entry.getKey());
assertEquals("Bundle-SymbolicName: org.example.foo", IO.collect(entry.getValue().getContent()));
}
public void testAlternateDelimiters() throws Exception {
List<Template> templates = loader.findTemplates("test2", new ProgressMonitorReporter(new NullProgressMonitor(), "")).getValue();
assertEquals(1, templates.size());
Template template = templates.get(0);
Map<String,List<Object>> parameters = new HashMap<>();
parameters.put("projectName", Collections.<Object> singletonList("org.example.foo"));
parameters.put("srcDir", Collections.<Object> singletonList("src/main/java"));
parameters.put("basePackageDir", Collections.<Object> singletonList("org/example/foo"));
ResourceMap outputs = template.generateOutputs(parameters);
assertEquals(5, outputs.size());
Iterator<Entry<String,Resource>> iter = outputs.entries().iterator();
Entry<String,Resource> entry;
entry = iter.next();
assertEquals("src/main/java/org/example/foo/Activator.java", entry.getKey());
assertEquals("package org.example.foo; public class Activator {}", IO.collect(entry.getValue().getContent()));
entry = iter.next();
assertEquals("pic.jpg", entry.getKey());
// Check the digest of the pic to ensure it didn't get damaged by the templating engine
DigestInputStream digestStream = new DigestInputStream(entry.getValue().getContent(), MessageDigest.getInstance("SHA-256"));
IO.drain(digestStream);
byte[] digest = digestStream.getMessageDigest().digest();
assertEquals("ea5d770bc2deddb1f9a20df3ad337bdc1490ba7b35fa41c33aa4e9a534e82ada", Hex.toHexString(digest).toLowerCase());
entry = iter.next();
assertEquals("src/main/java/", entry.getKey());
entry = iter.next();
assertEquals("src/main/java/org/example/foo/", entry.getKey());
entry = iter.next();
assertEquals("bnd.bnd", entry.getKey());
assertEquals("Bundle-SymbolicName: org.example.foo", IO.collect(entry.getValue().getContent()));
}
public void testReferTemplateDefinitions() throws Exception {
List<Template> templates = loader.findTemplates("test3", new ProgressMonitorReporter(new NullProgressMonitor(), "")).getValue();
assertEquals(1, templates.size());
Template template = templates.get(0);
Map<String,List<Object>> parameters = new HashMap<>();
parameters.put("name", Collections.<Object> singletonList("Homer Simpson"));
ResourceMap outputs = template.generateOutputs(parameters);
assertEquals(1, outputs.size());
Iterator<Entry<String,Resource>> iter = outputs.entries().iterator();
Entry<String,Resource> entry;
entry = iter.next();
assertEquals("example.html", entry.getKey());
assertEquals("My name is <i>Homer Simpson</i>!", IO.collect(entry.getValue().getContent()));
}
public void testExtendUnprocessedPatternAndIgnore() throws Exception {
List<Template> templates = loader.findTemplates("test4", new ProgressMonitorReporter(new NullProgressMonitor(), "")).getValue();
assertEquals(1, templates.size());
Template template = templates.get(0);
Map<String,List<Object>> parameters = new HashMap<>();
parameters.put("projectName", Collections.<Object> singletonList("org.example.foo"));
ResourceMap outputs = template.generateOutputs(parameters);
assertEquals(1, outputs.size());
Entry<String,Resource> entry;
Iterator<Entry<String,Resource>> iter = outputs.entries().iterator();
entry = iter.next();
assertEquals("pic.xxx", entry.getKey());
// Check the digest of the pic to ensure it didn't get damaged by the templating engine
DigestInputStream digestStream = new DigestInputStream(entry.getValue().getContent(), MessageDigest.getInstance("SHA-256"));
IO.drain(digestStream);
byte[] digest = digestStream.getMessageDigest().digest();
assertEquals("ea5d770bc2deddb1f9a20df3ad337bdc1490ba7b35fa41c33aa4e9a534e82ada", Hex.toHexString(digest).toLowerCase());
}
}