package org.openlegacy.designtime.terminal.generators;
import freemarker.template.TemplateException;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openlegacy.designtime.terminal.analyzer.support.DefaultTerminalSnapshotsAnalyzer;
import org.openlegacy.terminal.definitions.ScreenEntityDefinition;
import org.openlegacy.terminal.modules.trail.TerminalPersistedTrail;
import org.openlegacy.test.utils.AssertUtils;
import org.openlegacy.utils.FileUtils;
import org.openlegacy.utils.XmlSerializationUtil;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import javax.inject.Inject;
@ContextConfiguration("/test-designtime-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class TrailJunitGeneratorTest {
@Inject
private DefaultTerminalSnapshotsAnalyzer snapshotsAnalyzer;
@Inject
private GenerateUtil generateUtil;
@Inject
private TrailJunitGenerator trailJunitGenerator;
@Test
public void testJunit() throws Exception {
assertGenerateJunit("test.trail", "TrailJunit.java.expected");
}
@Test
public void testDemoSessionJunit() throws Exception {
assertGenerateJunit("demo_session.trail", "TrailJunitDemoSession.java.expected");
}
private void assertGenerateJunit(String trailPath, String expectedResource) throws Exception {
TerminalPersistedTrail trail = XmlSerializationUtil.deserialize(TerminalPersistedTrail.class,
getClass().getResourceAsStream(trailPath));
Map<String, ScreenEntityDefinition> screenEntitiesDefinitions = snapshotsAnalyzer.analyzeTrail(trail);
ByteArrayOutputStream baos = generate(screenEntitiesDefinitions);
byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream(expectedResource));
AssertUtils.assertContent(expectedBytes, baos.toByteArray());
// test custom template
try {
File tempFile = FileUtils.extractToTempDir(getClass().getResource("dummyTemplate.txt"), "JunitTrail.java.template");
generateUtil.setTemplateDirectory(tempFile.getParentFile());
baos = generate(screenEntitiesDefinitions);
String result = org.openlegacy.utils.StringUtil.toString(baos);
Assert.assertEquals("This is a dummy template for Test", result);
} finally {
generateUtil.setTemplateDirectory(null);
}
}
private ByteArrayOutputStream generate(Map<String, ScreenEntityDefinition> screenEntitiesDefinitions)
throws TemplateException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Collection<ScreenEntityDefinition> screenDefinitions = screenEntitiesDefinitions.values();
GenerateUtil.setPackageName(screenDefinitions, "com.test");
trailJunitGenerator.generate(screenDefinitions, "Test", baos);
return baos;
}
}