//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.consumers.template; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.resource.ResourceInitializationException; import org.junit.After; import org.junit.Before; import org.junit.Test; public class PerDocumentMustacheHtmlTemplateRecordConsumerTest extends AbstractTemplateRecordConsumerTest { private static final String OUTPUT_FILENAME = PerDocumentMustacheHtmlTemplateRecordConsumer.class.getSimpleName() + ".html"; private Path outputDirectory; public PerDocumentMustacheHtmlTemplateRecordConsumerTest() { super(PerDocumentMustacheHtmlTemplateRecordConsumer.class); } @Before public void before() throws IOException { outputDirectory = createTemporaryOutputDirectory(); } @Test public void testSubstitutedFlattenSources() throws IOException, AnalysisEngineProcessException, ResourceInitializationException { Path templateFile = process("template-flatten-sources.html", true, false); String generatedContent = new String(Files.readAllBytes(outputDirectory.resolve(OUTPUT_FILENAME)), StandardCharsets.UTF_8); assertEquals("<html>\n" + "<body>\n" + " <div>\n" + " <p>The quick brown</p>\n" + " <p>fox jumped over</p>\n" + " <p>The quick brown</p>\n" + " <p>cat jumped over</p>\n" + " </div>\n" + "</body>\n" + "</html>", generatedContent); Files.delete(templateFile); } @Test public void testSubstitutedContentFlattenAll() throws IOException, AnalysisEngineProcessException, ResourceInitializationException { Path templateFile = process("template-flatten-all.html", true, true); String generatedContent = new String(Files.readAllBytes(outputDirectory.resolve(OUTPUT_FILENAME)), StandardCharsets.UTF_8); assertEquals("<html>\n" + "<body>\n" + " <div>\n" + " <p>The quick brown</p>\n" + " <p>rat jumped over</p>\n" + " <p>The quick brown</p>\n" + " <p>fox jumped over</p>\n" + " <p>The quick brown</p>\n" + " <p>cat jumped over</p>\n" + " </div>\n" + "</body>\n" + "</html>", generatedContent); Files.delete(templateFile); } @Test public void testSubstitutedContentFullyQualified() throws IOException, AnalysisEngineProcessException, ResourceInitializationException { Path templateFile = process("template-fully-qualified.html", false, false); String generatedContent = new String(Files.readAllBytes(outputDirectory.resolve(OUTPUT_FILENAME)), StandardCharsets.UTF_8); assertEquals("<html>\n" + "<body>\n" + " <div>\n" + " <p>The quick brown</p>\n" + " <p>fox jumped over</p>\n" + " <p>The quick brown</p>\n" + " <p>cat jumped over</p>\n" + " </div>\n" + "</body>\n" + "</html>", generatedContent); Files.delete(templateFile); } @Test public void testMetadata() throws IOException, AnalysisEngineProcessException, ResourceInitializationException { Path templateFile = process("template-metadata.html", false, false); String generatedContent = new String(Files.readAllBytes(outputDirectory.resolve(OUTPUT_FILENAME)), StandardCharsets.UTF_8); assertEquals("<html>\n" + "<body>\n" + " <h1>The Author</h1>\n" + " <div>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>creator</th>\n" + " <td>The Creator</td>\n" + " </tr>\n" + " <tr>\n" + " <th>author</th>\n" + " <td>The Author</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + "</body>\n" + "</html>", generatedContent); Files.delete(templateFile); } @Test public void testContent() throws IOException, AnalysisEngineProcessException, ResourceInitializationException { Path templateFile = process("template-content.html", false, false); String generatedContent = new String(Files.readAllBytes(outputDirectory.resolve(OUTPUT_FILENAME)), StandardCharsets.UTF_8); assertEquals("<html>\n" + "<body>\n" + " <div>\n" + " <pre>\n" + "The quick brown fox jumped over the lazy dog's back.\n" + "The quick brown cat jumped over the lazy dog's back.\n" + "The quick brown rat jumped over the lazy dog's back.\n" + " </pre>\n" + " </div>\n" + "</body>\n" + "</html>", generatedContent); Files.delete(templateFile); } @Test public void testAll() throws IOException, AnalysisEngineProcessException, ResourceInitializationException { Path templateFile = process("template-all.html", false, false); String generatedContent = new String(Files.readAllBytes(outputDirectory.resolve(OUTPUT_FILENAME)), StandardCharsets.UTF_8); assertEquals("<html>\n" + "<body>\n" + " <h1>All metadata</h1>\n" + " <div>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>creator</th>\n" + " <td>The Creator</td>\n" + " </tr>\n" + " <tr>\n" + " <th>author</th>\n" + " <td>The Author</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " <h1>Single metadata field</h1>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>Author</th>\n" + " <td>The Author</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " <div>\n" + " <h1>Content</h1>\n" + " <pre>\n" + "The quick brown fox jumped over the lazy dog's back.\n" + "The quick brown cat jumped over the lazy dog's back.\n" + "The quick brown rat jumped over the lazy dog's back.\n" + " </pre>\n" + " </div>\n" + " <div>\n" + " <h1>Sources</h1>\n" + " <div>\n" + " <h2>PerDocumentMustacheHtmlTemplateRecordConsumer</h2>\n" + " <h3>Record record2</h3>\n" + " <h4>Fields</h4>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>record2Field2</th>\n" + " <td>cat jumped over</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record2Field1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " <h3>Record record1</h3>\n" + " <h4>Fields</h4>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>record1Field1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record1Field2</th>\n" + " <td>fox jumped over</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " </div>\n" + "\n" + " <div>\n" + " <h1>Flattened Records</h1>\n" + " <div>\n" + " <h2>Record record2</h2>\n" + " <h3>Fields</h3>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>record2Field2</th>\n" + " <td>cat jumped over</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record2Field1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " <div>\n" + " <h2>Record record1</h2>\n" + " <h3>Fields</h3>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>record1Field1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record1Field2</th>\n" + " <td>fox jumped over</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " </div>\n" + "\n" + "\n" + " <div>\n" + " <h1>Fields</h1>\n" + " <div>\n" + " <table>\n" + " <tbody>\n" + " <tr>\n" + " <th>record2Field2</th>\n" + " <td>cat jumped over</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record2Field1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record1Field1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " <tr>\n" + " <th>noRecordField1</th>\n" + " <td>The quick brown</td>\n" + " </tr>\n" + " <tr>\n" + " <th>noRecordField2</th>\n" + " <td>rat jumped over</td>\n" + " </tr>\n" + " <tr>\n" + " <th>record1Field2</th>\n" + " <td>fox jumped over</td>\n" + " </tr>\n" + " </tbody>\n" + " </table>\n" + " </div>\n" + " </div>\n" + "\n" + "</body>\n" + "</html>", generatedContent); Files.delete(templateFile); } private Path process(String templateName, boolean flattenSources, boolean flattenRecords) throws IOException, ResourceInitializationException, AnalysisEngineProcessException { Path templateFile = createTemporaryTemplatefile(templateName); String templateFilename = templateFile.toAbsolutePath().toString(); String outputDirectoryString = outputDirectory.toAbsolutePath().toString(); processJCas(PerDocumentMustacheHtmlTemplateRecordConsumer.PARAM_OUTPUT_DIRECTORY, outputDirectoryString, PerDocumentMustacheHtmlTemplateRecordConsumer.PARAM_FILENAME, templateFilename); return templateFile; } private Path createTemporaryOutputDirectory() throws IOException { Class<PerDocumentMustacheHtmlTemplateRecordConsumerTest> clazz = PerDocumentMustacheHtmlTemplateRecordConsumerTest.class; Path outputDirectory = Files.createTempDirectory(clazz.getSimpleName() + "-generatedDocuments"); outputDirectory.toFile().deleteOnExit(); return outputDirectory; } private Path createTemporaryTemplatefile(String templateName) throws IOException { Class<PerDocumentMustacheHtmlTemplateRecordConsumerTest> clazz = PerDocumentMustacheHtmlTemplateRecordConsumerTest.class; Path templateFile = Files.createTempFile(clazz.getSimpleName() + "-template", ".html"); templateFile.toFile().deleteOnExit(); Files.copy(clazz.getResourceAsStream(templateName), templateFile, StandardCopyOption.REPLACE_EXISTING); return templateFile; } @After public void after() throws IOException { Files.delete(outputDirectory.resolve(OUTPUT_FILENAME)); Files.delete(outputDirectory); } }