You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2020/04/04 15:59:24 UTC
[ofbiz-framework] 04/26: Improved: Added unit testing, using JMockit,
to ensure that form macros are rendered using ids from
ModelFormField#getCurrentContainerId.
This is an automated email from the ASF dual-hosted git repository.
jleroux pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
commit 87277ab9925f9dfa7787b86605b43857d2fc4978
Author: Daniel Watford <da...@watfordconsulting.com>
AuthorDate: Sun Feb 23 18:33:33 2020 +0000
Improved: Added unit testing, using JMockit, to ensure that form macros are
rendered using ids from ModelFormField#getCurrentContainerId.
(OFBIZ-4035)
---
build.gradle | 5 +
.../renderer/macro/MacroFormRendererTest.java | 151 +++++++++++++++++++++
2 files changed, 156 insertions(+)
diff --git a/build.gradle b/build.gradle
index 1488f35..8bae19d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -197,6 +197,7 @@ dependencies {
implementation 'com.auth0:java-jwt:3.8.3'
testImplementation 'org.hamcrest:hamcrest-library:2.2' // Enable junit4 to not depend on hamcrest-1.3
testImplementation 'org.mockito:mockito-core:3.2.0'
+ testImplementation 'org.jmockit:jmockit:1.49'
testImplementation 'com.pholser:junit-quickcheck-generators:0.9'
runtimeOnly 'javax.xml.soap:javax.xml.soap-api:1.4.0'
runtimeOnly 'de.odysseus.juel:juel-spi:2.2.7'
@@ -318,6 +319,10 @@ eclipse.classpath.file.whenMerged { classpath ->
}
tasks.eclipse.dependsOn(cleanEclipse)
+test {
+ jvmArgs "-javaagent:${classpath.find { it.name.contains("jmockit") }.absolutePath}"
+}
+
/* ========================================================
* Tasks
* ======================================================== */
diff --git a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
new file mode 100644
index 0000000..a2d4fb1
--- /dev/null
+++ b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
@@ -0,0 +1,151 @@
+package org.apache.ofbiz.widget.renderer.macro;
+
+import com.google.common.collect.ImmutableMap;
+import freemarker.core.Environment;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+import mockit.Expectations;
+import mockit.Mock;
+import mockit.MockUp;
+import mockit.Mocked;
+import org.apache.ofbiz.base.util.UtilCodec;
+import org.apache.ofbiz.base.util.UtilCodec.SimpleEncoder;
+import org.apache.ofbiz.base.util.UtilHttp;
+import org.apache.ofbiz.base.util.template.FreeMarkerWorker;
+import org.apache.ofbiz.webapp.control.RequestHandler;
+import org.apache.ofbiz.widget.model.ModelFormField;
+import org.apache.ofbiz.widget.model.ThemeFactory;
+import org.apache.ofbiz.widget.renderer.VisualTheme;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Map;
+
+public class MacroFormRendererTest {
+
+ @Mocked
+ private HttpServletRequest request;
+
+ @Mocked
+ private HttpServletResponse response;
+
+ @Mocked
+ private HttpSession httpSession;
+
+ @Mocked
+ private Template template;
+
+ @Mocked
+ private Environment environment;
+
+ @Mocked
+ private VisualTheme visualTheme;
+
+ @Mocked
+ private RequestHandler requestHandler;
+
+ @Mocked
+ private SimpleEncoder simpleEncoder;
+
+ @Mocked
+ private ModelFormField.ContainerField containerField;
+
+ @Mocked
+ private ModelFormField modelFormField;
+
+ @Mocked
+ private Appendable appendable;
+
+ @Mocked
+ private StringReader stringReader;
+
+ @Before
+ public void setupMockups() {
+ new FreeMarkerWorkerMockUp();
+ new ThemeFactoryMockUp();
+ new RequestHandlerMockUp();
+ new UtilHttpMockUp();
+ new UtilCodecMockUp();
+ }
+
+ @Test
+ public void textRendererUsesContainerId(@Mocked ModelFormField.TextField textField) throws IOException, TemplateException {
+ new Expectations() {{
+ httpSession.getAttribute("delegatorName");
+ result = "delegator";
+
+ textField.getModelFormField();
+ result = modelFormField;
+
+ modelFormField.getTooltip(withNotNull());
+ result = "";
+
+ modelFormField.getCurrentContainerId(withNotNull());
+ result = "CurrentTextId";
+
+ new StringReader(withSubstring("id=\"CurrentTextId\""));
+ }};
+
+ final MacroFormRenderer macroFormRenderer = new MacroFormRenderer(null, request, response);
+ macroFormRenderer.renderTextField(appendable, ImmutableMap.of("session", httpSession), textField);
+ }
+
+ @Test
+ public void containerRendererUsesContainerId() throws IOException, TemplateException {
+ new Expectations() {{
+ modelFormField.getCurrentContainerId(withNotNull());
+ result = "CurrentContainerId";
+
+ new StringReader(withSubstring("id=\"CurrentContainerId\""));
+ }};
+
+ final MacroFormRenderer macroFormRenderer = new MacroFormRenderer(null, request, response);
+ macroFormRenderer.renderContainerFindField(appendable, ImmutableMap.of(), containerField);
+ }
+
+ class FreeMarkerWorkerMockUp extends MockUp<FreeMarkerWorker> {
+ @Mock
+ public Template getTemplate(String templateLocation) {
+ return template;
+ }
+
+ @Mock
+ public Environment renderTemplate(Template template, Map<String, Object> context, Appendable outWriter) {
+ return environment;
+ }
+ }
+
+ class ThemeFactoryMockUp extends MockUp<ThemeFactory> {
+ @Mock
+ public VisualTheme resolveVisualTheme(HttpServletRequest request) {
+ return visualTheme;
+ }
+ }
+
+ class RequestHandlerMockUp extends MockUp<RequestHandler> {
+ @Mock
+ public RequestHandler from(HttpServletRequest request) {
+ return requestHandler;
+ }
+ }
+
+ class UtilHttpMockUp extends MockUp<UtilHttp> {
+ @Mock
+ public boolean isJavaScriptEnabled(HttpServletRequest request) {
+ return true;
+ }
+ }
+
+ class UtilCodecMockUp extends MockUp<UtilCodec> {
+ @Mock
+ public SimpleEncoder getEncoder(String type) {
+ return simpleEncoder;
+ }
+ }
+}
+