package org.openlegacy.designtime.terminal.generators; import apps.inventory.screens.ItemDetails1; import apps.inventory.screens.ItemsList; import apps.inventory.screens.SignOn; import freemarker.template.TemplateException; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.openlegacy.designtime.terminal.generators.mock.CompositeScreenForPage; import org.openlegacy.designtime.terminal.generators.mock.MenuScreenForPage; import org.openlegacy.designtime.terminal.generators.mock.ScreenForPage; import org.openlegacy.designtime.terminal.generators.support.CodeBasedDefinitionUtils; import org.openlegacy.layout.PageDefinition; import org.openlegacy.terminal.definitions.ScreenEntityDefinition; import org.openlegacy.terminal.layout.ScreenPageBuilder; import org.openlegacy.terminal.services.ScreenEntitiesRegistry; import org.openlegacy.test.utils.AssertUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import japa.parser.JavaParser; import japa.parser.ast.CompilationUnit; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.inject.Inject; @ContextConfiguration("ScreenEntityMvcGeneratorTest-context.xml") @RunWith(SpringJUnit4ClassRunner.class) public class ScreenEntityMvcGeneratorTest { @Inject private ScreenEntitiesRegistry screenEntitiesRegistry; @Inject private ScreenPageBuilder screenPageBuilder; @Inject ScreenEntityMvcGenerator screenEntityMvcGenerator; @Test public void testGenerateJspx() throws Exception { assertPageGeneration(screenEntitiesRegistry.get(ScreenForPage.class), "ScreenForPage.jspx.expected"); } @Test public void testGenerateJspxByType() throws Exception { ScreenEntityDefinition screenDefinition = screenEntitiesRegistry.get(MenuScreenForPage.class); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PageDefinition pageDefinition = screenPageBuilder.build(screenDefinition); screenEntityMvcGenerator.generatePage(pageDefinition, baos, "web/"); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream("MenuScreenForPage.jspx.expected")); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } @Test public void testGenerateJspxByCodeModel() throws Exception { String javaSource = "/org/openlegacy/designtime/terminal/generators/mock/ScreenForPage.java.resource"; CompilationUnit compilationUnit = JavaParser.parse(getClass().getResourceAsStream(javaSource)); ScreenEntityDefinition screenDefinition = CodeBasedDefinitionUtils.getEntityDefinition(compilationUnit, null); assertPageGeneration(screenDefinition, "ScreenForPage.jspx.expected"); } @Test public void testGenerateWebCompositeJspx() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); screenEntityMvcGenerator.generateCompositePage(screenEntitiesRegistry.get(CompositeScreenForPage.class), baos, ScreenEntityMvcGenerator.TEMPLATE_WEB_DIR_PREFIX); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream("ScreenForPageComposite.jspx.expected")); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } @Test public void testGenerateMobileCompositeJspx() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); screenEntityMvcGenerator.generateCompositePage(screenEntitiesRegistry.get(CompositeScreenForPage.class), baos, ScreenEntityMvcGenerator.TEMPLATE_MOBILE_DIR_PREFIX); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream("ScreenForPageMobileComposite.jspx.expected")); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } @Test public void testGenerateContollerAspectByCodeModel() throws Exception { String javaSource = "/org/openlegacy/designtime/terminal/generators/mock/ScreenForPage.java.resource"; CompilationUnit compilationUnit = JavaParser.parse(getClass().getResourceAsStream(javaSource)); ScreenEntityDefinition screenDefinition = CodeBasedDefinitionUtils.getEntityDefinition(compilationUnit, null); assertControllerAspectGeneration(screenDefinition); } @Test public void testGenerateContollerAspectByCodeModelWithKey() throws Exception { String javaSource = "/org/openlegacy/designtime/terminal/generators/mock/ScreenForPageWithKey.java.resource"; CompilationUnit compilationUnit = JavaParser.parse(getClass().getResourceAsStream(javaSource)); ScreenEntityDefinition screenDefinition = CodeBasedDefinitionUtils.getEntityDefinition(compilationUnit, null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PageDefinition pageDefinition = screenPageBuilder.build(screenDefinition); screenEntityMvcGenerator.generateControllerAspect(pageDefinition, baos); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream("ScreenForPageWithKeyController.aj.expected")); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } @Test public void testGenerateController() throws Exception { ScreenEntityDefinition screenDefinition = screenEntitiesRegistry.get(ScreenForPage.class); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PageDefinition pageDefinition = screenPageBuilder.build(screenDefinition); screenEntityMvcGenerator.generateController(pageDefinition, baos); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream("ScreenForPageController.java.expected")); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } @Test public void testGenerateControllerAspect() throws Exception { ScreenEntityDefinition screenDefinition = screenEntitiesRegistry.get(ScreenForPage.class); assertControllerAspectGeneration(screenDefinition); } private void assertControllerAspectGeneration(ScreenEntityDefinition screenDefinition) throws TemplateException, IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PageDefinition pageDefinition = screenPageBuilder.build(screenDefinition); screenEntityMvcGenerator.generateControllerAspect(pageDefinition, baos); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream("ScreenForPageController.aj.expected")); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } @Test public void testGenerateInventoryApp() throws Exception { assertPageGeneration(screenEntitiesRegistry.get(SignOn.class), "SignOn.jspx.expected"); assertPageGeneration(screenEntitiesRegistry.get(ItemsList.class), "ItemsList.jspx.expected"); assertPageGeneration(screenEntitiesRegistry.get(ItemDetails1.class), "ItemDetails1.jspx.expected"); } private void assertPageGeneration(ScreenEntityDefinition screenEntityDefinition, String expectedPageResultResource) throws TemplateException, IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PageDefinition pageDefinition = screenPageBuilder.build(screenEntityDefinition); screenEntityMvcGenerator.generatePage(pageDefinition, baos, "web/"); byte[] expectedBytes = IOUtils.toByteArray(getClass().getResourceAsStream(expectedPageResultResource)); AssertUtils.assertContent(expectedBytes, baos.toByteArray()); } }