diff --git a/gxawsserverless/src/test/java/com/gx/serverless/test/receivenumber.java b/gxawsserverless/src/test/java/com/gx/serverless/test/receivenumber.java index 8233cc382..dff0dc137 100644 --- a/gxawsserverless/src/test/java/com/gx/serverless/test/receivenumber.java +++ b/gxawsserverless/src/test/java/com/gx/serverless/test/receivenumber.java @@ -50,7 +50,7 @@ private void execute_int( short aP0 ) privateExecute(); } - private void privateExecute( ) + protected void privateExecute( ) { GXt_int1 = AV6i ; GXv_int2[0] = GXt_int1 ; diff --git a/gxawsserverless/src/test/java/com/gx/serverless/test/sessionset.java b/gxawsserverless/src/test/java/com/gx/serverless/test/sessionset.java index a0ae31a01..8357d2151 100644 --- a/gxawsserverless/src/test/java/com/gx/serverless/test/sessionset.java +++ b/gxawsserverless/src/test/java/com/gx/serverless/test/sessionset.java @@ -32,7 +32,7 @@ private void execute_int( String aP0 , privateExecute(); } - private void privateExecute( ) + protected void privateExecute( ) { AV10WebSession.setValue(AV8SessionName, AV9SessionValue); cleanup(); diff --git a/gxawsserverless/src/test/java/com/gx/serverless/test/sethttpresponseheaders.java b/gxawsserverless/src/test/java/com/gx/serverless/test/sethttpresponseheaders.java index 73b953c14..69bf22476 100644 --- a/gxawsserverless/src/test/java/com/gx/serverless/test/sethttpresponseheaders.java +++ b/gxawsserverless/src/test/java/com/gx/serverless/test/sethttpresponseheaders.java @@ -46,7 +46,7 @@ private void execute_int( short[] aP0 ) privateExecute(); } - private void privateExecute( ) + protected void privateExecute( ) { if ( ! httpContext.isAjaxRequest( ) ) { diff --git a/gxawsserverless/src/test/java/com/gx/serverless/test/test.java b/gxawsserverless/src/test/java/com/gx/serverless/test/test.java index 9a28dc55c..2bc84fda6 100644 --- a/gxawsserverless/src/test/java/com/gx/serverless/test/test.java +++ b/gxawsserverless/src/test/java/com/gx/serverless/test/test.java @@ -50,7 +50,7 @@ private void execute_int( short aP0 , privateExecute(); } - private void privateExecute( ) + protected void privateExecute( ) { GXt_int1 = AV6i ; GXv_int2[0] = GXt_int1 ; diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java index 7e7190d16..fdfb965c6 100644 --- a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java @@ -25,7 +25,7 @@ private void execute_int(String s, com.genexus.genexusserverlessapi.SdtEventMess privateExecute(); } - private void privateExecute() { + protected void privateExecute() { System.out.println("START Schedule Event received"); throw new RuntimeException("Handler error"); } diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java index 66ca40440..c38821bc0 100644 --- a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java @@ -24,7 +24,7 @@ private void execute_int() { privateExecute(); } - private void privateExecute() { + protected void privateExecute() { System.out.println("START EventBridge Event received with no parms"); System.out.println("END EventBridge Event"); cleanup(); diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java index 59253fa63..a47a2d39e 100644 --- a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java @@ -26,7 +26,7 @@ private void execute_int(String aP0, com.genexus.genexusserverlessapi.SdtEventMe privateExecute(); } - private void privateExecute() { + protected void privateExecute() { System.out.println("START EventBridge Event received"); System.out.println("END EventBridge Event received"); cleanup(); diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java index 044f5572a..16f9887fd 100644 --- a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java @@ -37,7 +37,7 @@ private void execute_int(com.genexus.genexusserverlessapi.SdtEventMessages aP0, privateExecute(); } - private void privateExecute() { + protected void privateExecute() { System.out.println("START EventBridge Event received"); System.out.println("END EventBridge Event received"); cleanup(); diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java index 0dbb628aa..b58896d47 100644 --- a/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java @@ -25,7 +25,7 @@ private void execute_int(String aP0, com.genexus.genexusserverlessapi.SdtEventMe privateExecute(); } - private void privateExecute() { + protected void privateExecute() { System.out.println("START Queue Event received"); System.out.println(AV13RAWMessage); System.out.println("END Queue Event received"); diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java index 381eec5e2..4893d9e07 100644 --- a/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java @@ -34,7 +34,7 @@ private void execute_int(com.genexus.genexusserverlessapi.SdtEventMessages aP0, privateExecute(); } - private void privateExecute() { + protected void privateExecute() { System.out.println("START Queue Event received"); System.out.println(AV8EventMessages.toJSonString(false, true)); diff --git a/gxdynamiccall/src/test/java/com/genexus/gxdynamiccall/test/DynamicCallTestProcedure.java b/gxdynamiccall/src/test/java/com/genexus/gxdynamiccall/test/DynamicCallTestProcedure.java index d14e388ea..e57182bbd 100644 --- a/gxdynamiccall/src/test/java/com/genexus/gxdynamiccall/test/DynamicCallTestProcedure.java +++ b/gxdynamiccall/src/test/java/com/genexus/gxdynamiccall/test/DynamicCallTestProcedure.java @@ -43,7 +43,7 @@ private void execute_int( short aP0 , privateExecute(); } - private void privateExecute( ) + protected void privateExecute( ) { AV11numAux = (short)(AV8varchar1+AV9varchar2) ; AV10varchar3 = GXutil.str( AV11numAux, 4, 0) ; diff --git a/java/src/main/java/com/genexus/GXProcedure.java b/java/src/main/java/com/genexus/GXProcedure.java index 176565c53..74ff02993 100644 --- a/java/src/main/java/com/genexus/GXProcedure.java +++ b/java/src/main/java/com/genexus/GXProcedure.java @@ -8,13 +8,13 @@ import com.genexus.diagnostics.GXDebugInfo; import com.genexus.diagnostics.GXDebugManager; import com.genexus.internet.HttpContext; +import com.genexus.mock.GXMockProvider; import com.genexus.performance.ProcedureInfo; import com.genexus.performance.ProceduresInfo; import com.genexus.util.ReorgSubmitThreadPool; import com.genexus.util.SubmitThreadPool; -public abstract class GXProcedure implements IErrorHandler, ISubmitteable -{ +public abstract class GXProcedure implements IErrorHandler, ISubmitteable { public abstract void initialize(); protected transient int remoteHandle; @@ -31,14 +31,11 @@ public abstract class GXProcedure implements IErrorHandler, ISubmitteable public static final int IN_NEW_UTL = -2; - public GXProcedure(int remoteHandle, ModelContext context, String location) - { + public GXProcedure(int remoteHandle, ModelContext context, String location) { this(false, remoteHandle, context, location); } - public GXProcedure(boolean inNewUTL, int remoteHandle, ModelContext context, String location) - { - + public GXProcedure(boolean inNewUTL, int remoteHandle, ModelContext context, String location) { //JMX Counter beginExecute = new Date(); ProcedureInfo pInfo = ProceduresInfo.addProcedureInfo(this.getClass().getName()); @@ -49,18 +46,15 @@ public GXProcedure(boolean inNewUTL, int remoteHandle, ModelContext context, Str this.location = location; int parentHandle = remoteHandle; - if(inNewUTL) - { + if(inNewUTL) { remoteHandle = IN_NEW_UTL; } - if (context != null && context.getSessionContext() != null) - { + if (context != null && context.getSessionContext() != null) { ApplicationContext.getInstance().setEJB(true); ApplicationContext.getInstance().setPoolConnections(true); } - switch(remoteHandle) - { + switch(remoteHandle) { case -1: ui = Application.getConnectionManager().createUserInformation(Namespace.getNamespace(context.getNAME_SPACE())); this.remoteHandle = ui.getHandle(); @@ -75,23 +69,18 @@ public GXProcedure(boolean inNewUTL, int remoteHandle, ModelContext context, Str ui.setAutoDisconnect(true); break; case IN_NEW_UTL: - if(context.prefs == null && ApplicationContext.getInstance().isApplicationServer()) - { - if(parentHandle == IN_NEW_UTL) - { + if(context.prefs == null && ApplicationContext.getInstance().isApplicationServer()) { + if(parentHandle == IN_NEW_UTL) { context.prefs = ClientPreferences.getInstance(context.packageClass); } - else - { + else { context.prefs = ServerPreferences.getInstance(context.packageClass); Preferences specificPrefs = (Preferences) context.getPreferences(); specificPrefs.iniFile.setProperty(specificPrefs.defaultSection, "NAME_SPACE", Application.getConnectionManager().getUserInformation(parentHandle).getNamespace().getName()); } } - if (ApplicationContext.getInstance().isApplicationServer()) - { - if(context.prefs.getProperty("NAME_SPACE", "").equals("")) - { + if (ApplicationContext.getInstance().isApplicationServer()) { + if(context.prefs.getProperty("NAME_SPACE", "").equals("")) { Preferences specificPrefs = (Preferences) context.getPreferences(); specificPrefs.iniFile.setProperty(specificPrefs.defaultSection, "NAME_SPACE", Application.getConnectionManager().getUserInformation(parentHandle).getNamespace().getName()); } @@ -105,104 +94,86 @@ public GXProcedure(boolean inNewUTL, int remoteHandle, ModelContext context, Str } localUtil = ui.getLocalUtil(); - if (context != null) - { + if (context != null) { httpContext = (HttpContext) context.getHttpContext(); httpContext.initClientId(); } } - public Object me() - { + public Object me() { return this; } - public void handleError() - { + public void handleError() { new DefaultErrorHandler().handleError(context, remoteHandle); } - public int getHandle() - { + public int getHandle() { return remoteHandle; } - public ModelContext getContext() - { + public ModelContext getContext() { return context; } - protected boolean isRemoteProcedure() - { + protected boolean isRemoteProcedure() { return Application.isRemoteProcedure(context, remoteHandle, location); } - protected boolean batchCursorHolder(){ return false;} - protected void exitApp() - { + protected boolean batchCursorHolder(){ + return false; + } + protected void exitApp() { exitApplication(batchCursorHolder()); } /** * @deprecated use exitApp() * */ - protected void exitApplication() - { + protected void exitApplication() { exitApplication(true); } - private void exitApplication(boolean flushBuffers) - { + private void exitApplication(boolean flushBuffers) { if(dbgInfo != null && Application.realMainProgram == this) dbgInfo.onExit(); if (flushBuffers) { try { Application.getConnectionManager().flushBuffers(remoteHandle, this); - } catch (Exception exception) { - ; - } + } catch (Exception exception) { ; } } - if(disconnectUserAtCleanup) - { - try - { + if(disconnectUserAtCleanup) { + try { Application.getConnectionManager().disconnect(remoteHandle); - }catch(Exception disconnectException){ ; } + } catch(Exception disconnectException){ ; } } Application.cleanup(context, this, remoteHandle); } - public void endExecute(String name) - { + public void endExecute(String name) { ProcedureInfo pInfo = ProceduresInfo.getProcedureInfo(name); pInfo.setTimeExecute(System.currentTimeMillis() - beginExecute.getTime()); - if (context != null && context.getSessionContext() != null) - { + if (context != null && context.getSessionContext() != null) { ApplicationContext.getInstance().setEJB(false); ApplicationContext.getInstance().setPoolConnections(false); - } + } } - public void release() - { + public void release() { } - protected String formatLink(String jumpURL) - { + protected String formatLink(String jumpURL) { return formatLink(jumpURL, new String[]{}, new String[]{}); } - protected String formatLink(String jumpURL, String[] parms, String[] parmsName) - { + protected String formatLink(String jumpURL, String[] parms, String[] parmsName) { String contextPath = (httpContext.getRequest() == null)? "" : httpContext.getRequest().getContextPath(); return URLRouter.getURLRoute(jumpURL, parms, parmsName, contextPath, context.getPackageName()); } - public void callSubmit(final int id, Object [] submitParms) - { + public void callSubmit(final int id, Object [] submitParms) { SubmitThreadPool.submit(this, id, submitParms, context.submitCopy()); } - public void callSubmit(String blockName, String message, final int id, Object [] submitParms) - { + public void callSubmit(String blockName, String message, final int id, Object [] submitParms) { ReorgSubmitThreadPool.submitReorg(blockName, message, this, id); } @@ -213,68 +184,73 @@ public void submit(int id, Object [] submitParms){ } public void submitReorg(int id, Object [] submitParms) throws SQLException{ } - public void setejbMessageCall() - { + public void setejbMessageCall() { ejbMessageCall = true; } - public void SetCreateDataBase() - { + public void SetCreateDataBase() { GXReorganization.setCreateDataBase(); } - public int setLanguage(String language) - { + public int setLanguage(String language) { int res = GXutil.setLanguage(language, context, ui); this.localUtil = ui.getLocalUtil(); return res; } - protected void callWebObject(String url) - { + protected void callWebObject(String url) { httpContext.wjLoc = url; } - protected void cleanup() - { + protected void cleanup() { } - public void handleException(String gxExceptionType, String gxExceptionDetails, String gxExceptionStack) - { + public void handleException(String gxExceptionType, String gxExceptionDetails, String gxExceptionStack) { } private GXDebugInfo dbgInfo = null; - protected void trkCleanup() - { + protected void trkCleanup() { if(dbgInfo != null) dbgInfo.onCleanup(); } - protected void initialize(int objClass, int objId, int dbgLines, long hash) - { + protected void initialize(int objClass, int objId, int dbgLines, long hash) { dbgInfo = GXDebugManager.getInstance().getDbgInfo(context, objClass, objId, dbgLines, hash); } - protected void trk(int lineNro) - { + protected void trk(int lineNro) { if(dbgInfo != null) dbgInfo.trk(lineNro); } - protected void trk(int lineNro, int lineNro2) - { + protected void trk(int lineNro, int lineNro2) { if(dbgInfo != null) dbgInfo.trk(lineNro, lineNro2); } - protected void trkrng(int lineNro, int lineNro2) - { + protected void trkrng(int lineNro, int lineNro2) { trkrng(lineNro, 0, lineNro2, 0); } - protected void trkrng(int lineNro, int colNro, int lineNro2, int colNro2) - { + protected void trkrng(int lineNro, int colNro, int lineNro2, int colNro2) { if(dbgInfo != null) dbgInfo.trkRng(lineNro, colNro, lineNro2, colNro2); } + + protected void privateExecute() { + } + + protected String[] getParametersInternalNames( ) { + return null ; + } + + protected void mockExecute() { + if (GXMockProvider.getProvier() != null) { + if (GXMockProvider.getProvier().handle(remoteHandle, context, this, getParametersInternalNames())) { + cleanup(); + return; + } + } + privateExecute( ); + } } diff --git a/java/src/main/java/com/genexus/mock/GXMockProvider.java b/java/src/main/java/com/genexus/mock/GXMockProvider.java new file mode 100644 index 000000000..e736b27b9 --- /dev/null +++ b/java/src/main/java/com/genexus/mock/GXMockProvider.java @@ -0,0 +1,21 @@ +package com.genexus.mock; + +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; + +public class GXMockProvider { + private static final ILogger logger = LogManager.getLogger(GXMockProvider.class); + private static IGXMock provider; + + public static IGXMock getProvier() { + return provider; + } + + public static void setProvider(IGXMock mockProvider) { + provider = mockProvider; + if (mockProvider != null) + logger.debug("Mock provider: " + mockProvider.getClass().getName()); + else + logger.debug("Mock provider set to null"); + } +} diff --git a/java/src/main/java/com/genexus/mock/IGXMock.java b/java/src/main/java/com/genexus/mock/IGXMock.java new file mode 100644 index 000000000..3b047863b --- /dev/null +++ b/java/src/main/java/com/genexus/mock/IGXMock.java @@ -0,0 +1,7 @@ +package com.genexus.mock; + +import com.genexus.ModelContext; + +public interface IGXMock { + boolean handle(int remoteHandle , ModelContext context, Object gxObject, String[] parametersName); +} diff --git a/java/src/main/java/com/genexus/webpanels/GXWebProcedure.java b/java/src/main/java/com/genexus/webpanels/GXWebProcedure.java index 074a78b6e..53f102ae3 100644 --- a/java/src/main/java/com/genexus/webpanels/GXWebProcedure.java +++ b/java/src/main/java/com/genexus/webpanels/GXWebProcedure.java @@ -3,6 +3,7 @@ import java.io.PrintWriter; import com.genexus.GXObjectBase; +import com.genexus.mock.GXMockProvider; import com.genexus.servlet.IServletContext; import com.genexus.servlet.ServletContext; import com.genexus.servlet.http.IHttpServletRequest; @@ -19,8 +20,7 @@ import com.genexus.internet.HttpContext; import com.genexus.ws.GXHandlerChain; -public abstract class GXWebProcedure extends GXObjectBase -{ +public abstract class GXWebProcedure extends GXObjectBase { private static final ILogger logger = LogManager.getLogger(GXWebProcedure.class); public static final int IN_NEW_UTL = -2; @@ -32,10 +32,8 @@ public GXWebProcedure(HttpContext httpContext) super(httpContext); } - public GXWebProcedure(WebServiceContext wsContext) - { - try - { + public GXWebProcedure(WebServiceContext wsContext) { + try { MessageContext msg = new MessageContext(wsContext); IHttpServletRequest request = new HttpServletRequest(msg.get(msg.getSERVLET_REQUEST())); IHttpServletResponse response = new HttpServletResponse(msg.get(msg.getSERVLET_RESPONSE())); @@ -45,8 +43,7 @@ public GXWebProcedure(WebServiceContext wsContext) httpContext.getHttpRequest().setSoapMessageBody(messageBody); init(httpContext, getClass()); } - catch(Throwable e) - { + catch(Throwable e) { logger.error("Could not initialize Web Service", e); } } @@ -64,8 +61,7 @@ public GXWebProcedure(boolean inNewUTL, int remoteHandle , ModelContext context) } } - protected void initState(ModelContext context, UserInformation ui) - { + protected void initState(ModelContext context, UserInformation ui) { super.initState(context, ui); if(httpContext.getHttpSecure() == 0)httpContext.setHeader("pragma", "no-cache"); @@ -80,17 +76,14 @@ protected boolean isBufferedResponse() { return true; } - protected void preExecute() - { + protected void preExecute() { httpContext.setStream(); httpContext.GX_xmlwrt.setWriter(new PrintWriter(httpContext.getOutputStream())); } - protected void cleanup() - { + protected void cleanup() { super.cleanup(); - if (httpContext != null && !httpContext.willRedirect() && httpContext.isLocalStorageSupported()) - { + if (httpContext != null && !httpContext.willRedirect() && httpContext.isLocalStorageSupported()) { httpContext.deleteReferer(); } } @@ -100,9 +93,7 @@ public boolean isMasterPage() return false; } - - public void release() - { + public void release() { } protected boolean isSpaSupported() @@ -113,5 +104,22 @@ protected boolean isSpaSupported() protected void callWebObject(String url) { httpContext.wjLoc = url; - } + } + + protected void privateExecute() { + } + + protected String[] getParametersInternalNames( ) { + return null ; + } + + protected void mockExecute() { + if (GXMockProvider.getProvier() != null) { + if (GXMockProvider.getProvier().handle(remoteHandle, context, this, getParametersInternalNames())) { + cleanup(); + return; + } + } + privateExecute( ); + } } \ No newline at end of file diff --git a/java/src/test/java/com/mockdata/TestMockData.java b/java/src/test/java/com/mockdata/TestMockData.java new file mode 100644 index 000000000..d07a1a24d --- /dev/null +++ b/java/src/test/java/com/mockdata/TestMockData.java @@ -0,0 +1,46 @@ +package com.mockdata; + +import com.genexus.Application; +import com.genexus.mock.GXMockProvider; +import com.genexus.mock.IGXMock; +import com.genexus.sampleapp.GXcfg; +import com.genexus.specific.java.Connect; +import com.genexus.specific.java.LogManager; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestMockData { + private void initialize() + { + Connect.init(); + LogManager.initialize("."); + Application.init(GXcfg.class); + } + + @Test + public void testWithoutMock() { + initialize(); + + GXMockProvider.setProvider(null); + TestOriginalClass mockClass = new TestOriginalClass(-1); + short GXv_int1[] = new short[1]; + mockClass.execute((short)1, "Hello!", GXv_int1); + + assertEquals((short)3, GXv_int1[0]); + } + + @Test + public void testWithMockData() { + initialize(); + + IGXMock mockProvider = new TestMockDataProvider(); + GXMockProvider.setProvider(mockProvider); + + TestOriginalClass mockClass = new TestOriginalClass(-1); + short GXv_int1[] = new short[1]; + mockClass.execute((short)1, "Hello!", GXv_int1); + + assertEquals((short)4, GXv_int1[0]); + } +} diff --git a/java/src/test/java/com/mockdata/TestMockDataClass.java b/java/src/test/java/com/mockdata/TestMockDataClass.java new file mode 100644 index 000000000..bbebf77b6 --- /dev/null +++ b/java/src/test/java/com/mockdata/TestMockDataClass.java @@ -0,0 +1,63 @@ +package com.mockdata ; + +import com.genexus.*; + +public final class TestMockDataClass extends GXProcedure { + public TestMockDataClass( int remoteHandle ) { + super( remoteHandle , new ModelContext( TestMockData.class ), "" ); + } + + public TestMockDataClass( int remoteHandle, ModelContext context ) { + super( remoteHandle , context, "" ); + } + + @SuppressWarnings("unchecked") + public short executeUdp( short aP0, String aP1) { + TestMockDataClass.this.aP2 = new short[] {0}; + execute_int(aP0, aP1, aP2); + return aP2[0]; + } + + public void execute( short aP0, String aP1, short[] aP2 ) { + execute_int(aP0, aP1, aP2); + } + + private void execute_int( short aP0, String aP1, short[] aP2 ) { + TestMockDataClass.this.AV8parm1 = aP0; + TestMockDataClass.this.AV9parm2 = aP1; + TestMockDataClass.this.AV10parm3 = aP2[0]; + this.aP2 = aP2; + initialize(); + mockExecute(); + } + + protected String[] getParametersInternalNames( ) { + return new String[]{"AV8parm1","AV9parm2","AV10parm3"} ; + } + + protected void privateExecute( ) { + AV10parm3 = (short)(AV8parm1+3) ; + System.out.println( AV9parm2 ); + cleanup(); + } + + protected void cleanup( ) { + this.aP2[0] = TestMockDataClass.this.AV10parm3; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors( ) { + } + + /* Aggregate/select formulas */ + public void initialize( ) { + /* GeneXus formulas. */ + } + + private short AV8parm1 ; + private short AV10parm3 ; + private String AV9parm2 ; + private short[] aP2 ; +} + diff --git a/java/src/test/java/com/mockdata/TestMockDataProvider.java b/java/src/test/java/com/mockdata/TestMockDataProvider.java new file mode 100644 index 000000000..51cfddbcc --- /dev/null +++ b/java/src/test/java/com/mockdata/TestMockDataProvider.java @@ -0,0 +1,55 @@ +package com.mockdata; + +import com.genexus.ModelContext; +import com.genexus.mock.IGXMock; + +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class TestMockDataProvider implements IGXMock { + + public boolean handle(int remoteHandle , ModelContext context, Object gxObject, String[] parametersName) { + if (gxObject instanceof TestOriginalClass) { + try { + Field[] privateFields = new Field[parametersName.length]; + for(int i=0; i < parametersName.length; i++) { + privateFields[i] = gxObject.getClass().getDeclaredField(parametersName[i]); + privateFields[i].setAccessible(true); + } + + Class myClass = Class.forName("com.mockdata.TestMockDataClass"); + Object instance = myClass.getDeclaredConstructor(int.class, ModelContext.class).newInstance(remoteHandle, context); + for(Method method : myClass.getDeclaredMethods()) { + if (method.getName().equals("execute")) { + Object[] parameters = new Object[parametersName.length]; + Class[] parametersTypes = method.getParameterTypes(); + int i = 0; + for (Class parameterClass : parametersTypes) { + if (parameterClass.isArray()) { + parameters[i] = Array.newInstance(privateFields[i].getType(), 1); + Array.set(parameters[i], 0, privateFields[i].get(gxObject)); + } + else + parameters[i] = privateFields[i].get(gxObject); + i++; + } + method.invoke(instance, parameters); + i = 0; + for (Class parameterClass : parametersTypes) { + if (parameterClass.isArray()) + privateFields[i].set(gxObject, Array.get(parameters[i], 0)); + i++; + } + break; + } + } + } + catch (Exception e) { + e.printStackTrace(); + } + return true; + } + return false; + } +} diff --git a/java/src/test/java/com/mockdata/TestOriginalClass.java b/java/src/test/java/com/mockdata/TestOriginalClass.java new file mode 100644 index 000000000..9662609e7 --- /dev/null +++ b/java/src/test/java/com/mockdata/TestOriginalClass.java @@ -0,0 +1,63 @@ +package com.mockdata ; + +import com.genexus.*; + +public final class TestOriginalClass extends GXProcedure { + public TestOriginalClass( int remoteHandle ) { + super( remoteHandle , new ModelContext( TestMockData.class ), "" ); + } + + public TestOriginalClass( int remoteHandle, ModelContext context ) { + super( remoteHandle , context, "" ); + } + + @SuppressWarnings("unchecked") + public short executeUdp( short aP0, String aP1) { + TestOriginalClass.this.aP2 = new short[] {0}; + execute_int(aP0, aP1, aP2); + return aP2[0]; + } + + public void execute( short aP0, String aP1, short[] aP2 ) { + execute_int(aP0, aP1, aP2); + } + + private void execute_int( short aP0, String aP1, short[] aP2 ) { + TestOriginalClass.this.AV8parm1 = aP0; + TestOriginalClass.this.AV9parm2 = aP1; + TestOriginalClass.this.AV10parm3 = aP2[0]; + this.aP2 = aP2; + initialize(); + mockExecute(); + } + + protected String[] getParametersInternalNames( ) { + return new String[]{"AV8parm1","AV9parm2","AV10parm3"} ; + } + + protected void privateExecute( ) { + AV10parm3 = (short)(AV8parm1+2) ; + System.out.println( AV9parm2 ); + cleanup(); + } + + protected void cleanup( ) { + this.aP2[0] = TestOriginalClass.this.AV10parm3; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors( ) { + } + + /* Aggregate/select formulas */ + public void initialize( ) { + /* GeneXus formulas. */ + } + + private short AV8parm1 ; + private short AV10parm3 ; + private String AV9parm2 ; + private short[] aP2 ; +} + diff --git a/java/src/test/java/com/mockdb/ausemockdataaccess.java b/java/src/test/java/com/mockdb/ausemockdataaccess.java index eda7d35a8..53acb9797 100644 --- a/java/src/test/java/com/mockdb/ausemockdataaccess.java +++ b/java/src/test/java/com/mockdb/ausemockdataaccess.java @@ -46,7 +46,7 @@ private void execute_int( ) privateExecute(); } - private void privateExecute( ) + protected void privateExecute( ) { /* INSERT RECORD ON TABLE Transaction1