package org.overture.codegen.tests; import java.io.File; import org.apache.velocity.runtime.parser.ParseException; import org.junit.Assert; import org.junit.Test; import org.overture.codegen.ir.INode; import org.overture.codegen.ir.declarations.ADefaultClassDeclIR; import org.overture.codegen.ir.expressions.APlusNumericBinaryExpIR; import org.overture.codegen.merging.TemplateData; import org.overture.codegen.merging.TemplateManager; public class TemplateManagerTest { public static final String TEST_ROOT = "myRoot"; private static final String TEST_TEMPLATE = TEST_ROOT + File.separator + "TestTemplate.vm"; @Test public void derivePath() { Class<? extends INode> nodeClass = ADefaultClassDeclIR.class; String relPath = TemplateManager.derivePath(TEST_ROOT, nodeClass); Assert.assertEquals("Got unexpected relative path for " + nodeClass, nodePath(nodeClass), relPath); } @Test public void templateExists() { TemplateManager manager = new TemplateManager(TEST_ROOT, TemplateManagerTest.class); Class<? extends INode> nodeClass = ADefaultClassDeclIR.class; String expectNoTemplate = "Expected no template to be found"; try { Assert.assertNull(expectNoTemplate, manager.getTemplate(nodeClass)); } catch (ParseException e) { Assert.fail(expectNoTemplate); } manager.setUserTemplatePath(manager.getTemplateLoaderRef(), nodeClass, TEST_TEMPLATE); String expectTemplate = "Expected template to be found"; try { Assert.assertNotNull(expectTemplate, manager.getTemplate(nodeClass)); } catch (ParseException e) { Assert.fail(expectTemplate); } } @Test public void reuseDerivedTemplate() { TemplateManager manager = new TemplateManager(TEST_ROOT); Class<ADefaultClassDeclIR> clazz = ADefaultClassDeclIR.class; Assert.assertFalse("Expected no user-defined template file for node " + clazz, manager.isUserDefined(clazz)); manager.setUserTemplatePath(manager.getTemplateLoaderRef(), clazz, TEST_TEMPLATE); Assert.assertTrue("Expected a user-defined template file for node " + clazz + " by now", manager.isUserDefined(clazz)); Class<APlusNumericBinaryExpIR> plus = APlusNumericBinaryExpIR.class; Assert.assertFalse("Expected no user-defined template file for node " + plus, manager.isUserDefined(plus)); TemplateData t = manager.getTemplateData(clazz); manager.setUserTemplatePath(manager.getTemplateLoaderRef(), plus, t.getTemplatePath()); Assert.assertTrue("Expected node " + plus + " to have reused " + clazz + "'s template", manager.getTemplateData(plus).getTemplatePath() == TEST_TEMPLATE); } private String nodePath(Class<? extends INode> node) { return TEST_ROOT + File.separator + node.getName().replace('.', File.separatorChar) + TemplateManager.TEMPLATE_FILE_EXTENSION; } }