Adds additional use cases and fixes some minor issues

Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/70273869
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/70273869
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/70273869

Branch: refs/heads/master
Commit: 702738693ce9206f3023903d73094fe1522cb91c
Parents: 61ab813
Author: Lukasz Lenart <lukaszlen...@apache.org>
Authored: Sun Dec 21 20:46:40 2014 +0100
Committer: Lukasz Lenart <lukaszlen...@apache.org>
Committed: Sun Dec 21 20:46:40 2014 +0100

----------------------------------------------------------------------
 .../xwork2/DefaultActionInvocation.java         |  11 +-
 .../xwork2/DefaultActionInvocationTest.java     | 175 ++++++++++++++++++-
 .../com/opensymphony/xwork2/SimpleAction.java   |   3 +
 3 files changed, 176 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/70273869/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionInvocation.java
----------------------------------------------------------------------
diff --git 
a/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionInvocation.java 
b/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionInvocation.java
index f2c28ea..1bf7ccf 100644
--- 
a/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionInvocation.java
+++ 
b/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionInvocation.java
@@ -426,10 +426,10 @@ public class DefaultActionInvocation implements 
ActionInvocation {
                 if (e.getReason() instanceof NoSuchMethodException) {
                     try {
                         String altMethodName = "do" + methodName.substring(0, 
1).toUpperCase() + methodName.substring(1) + "()";
-                        methodResult = ognlUtil.getValue(altMethodName, 
ActionContext.getContext().getContextMap(), action);
+                        methodResult = ognlUtil.getValue(altMethodName, 
getStack().getContext(), action);
                     } catch (MethodFailedException e1) {
                         // if still method doesn't exist, try checking 
UnknownHandlers
-                        if (e.getReason() instanceof NoSuchMethodException) {
+                        if (e1.getReason() instanceof NoSuchMethodException) {
                             if (unknownHandlerManager.hasUnknownHandlers()) {
                                 try {
                                     methodResult = 
unknownHandlerManager.handleUnknownMethod(action, methodName);
@@ -438,6 +438,7 @@ public class DefaultActionInvocation implements 
ActionInvocation {
                                     throw e;
                                 }
                             } else {
+                                // throw the original one
                                 throw e;
                             }
                             // throw the original exception as UnknownHandlers 
weren't able to handle invocation as well
@@ -445,12 +446,12 @@ public class DefaultActionInvocation implements 
ActionInvocation {
                                 throw e;
                             }
                         } else {
-                            // exception isn't related to missing action method
-                            throw e;
+                            // exception isn't related to missing action 
method, throw it
+                            throw e1;
                         }
                     }
                 } else {
-                    // exception isn't related to missing action method
+                    // exception isn't related to missing action method, throw 
it
                     throw e;
                 }
             }

http://git-wip-us.apache.org/repos/asf/struts/blob/70273869/xwork-core/src/test/java/com/opensymphony/xwork2/DefaultActionInvocationTest.java
----------------------------------------------------------------------
diff --git 
a/xwork-core/src/test/java/com/opensymphony/xwork2/DefaultActionInvocationTest.java
 
b/xwork-core/src/test/java/com/opensymphony/xwork2/DefaultActionInvocationTest.java
index d0ff2b5..4291538 100644
--- 
a/xwork-core/src/test/java/com/opensymphony/xwork2/DefaultActionInvocationTest.java
+++ 
b/xwork-core/src/test/java/com/opensymphony/xwork2/DefaultActionInvocationTest.java
@@ -106,6 +106,28 @@ public class DefaultActionInvocationTest extends 
XWorkTestCase {
         assertEquals("success", result);
     }
 
+    public void testInvokingExistingDoInputMethod() throws Exception {
+        // given
+        DefaultActionInvocation dai = new DefaultActionInvocation(new 
HashMap<String, Object>(), false) {
+            public ValueStack getStack() {
+                return new StubValueStack();
+            }
+        };
+
+        SimpleAction action = new SimpleAction();
+        MockActionProxy proxy = new MockActionProxy();
+        proxy.setMethod("with");
+
+        dai.proxy = proxy;
+        dai.ognlUtil = new OgnlUtil();
+
+        // when
+        String result = dai.invokeAction(action, null);
+
+        // then
+        assertEquals("with", result);
+    }
+
     public void testInvokingMissingMethod() throws Exception {
         // given
         DefaultActionInvocation dai = new DefaultActionInvocation(new 
HashMap<String, Object>(), false) {
@@ -135,16 +157,16 @@ public class DefaultActionInvocationTest extends 
XWorkTestCase {
         dai.unknownHandlerManager = uhm;
 
         // when
-        Throwable expected = null;
+        Throwable actual = null;
         try {
             dai.invokeAction(action, null);
         } catch (Exception e) {
-            expected = e;
+            actual = e;
         }
 
         // then
-        assertNotNull(expected);
-        assertTrue(expected instanceof NoSuchMethodException);
+        assertNotNull(actual);
+        assertTrue(actual instanceof NoSuchMethodException);
     }
 
     public void testInvokingExistingMethodThatThrowsException() throws 
Exception {
@@ -168,17 +190,154 @@ public class DefaultActionInvocationTest extends 
XWorkTestCase {
         dai.ognlUtil = new OgnlUtil();
 
         // when
+        Throwable actual = null;
+        try {
+            dai.invokeAction(action, null);
+        } catch (Exception e) {
+            actual = e;
+        }
+
+        // then
+        assertNotNull(actual);
+        assertTrue(actual instanceof IllegalArgumentException);
+    }
+
+    public void testInvokingExistingDoMethodThatThrowsException() throws 
Exception {
+        // given
+        DefaultActionInvocation dai = new DefaultActionInvocation(new 
HashMap<String, Object>(), false) {
+            public ValueStack getStack() {
+                return new StubValueStack();
+            }
+        };
+
+        UnknownHandlerManager uhm = new DefaultUnknownHandlerManager() {
+            @Override
+            public boolean hasUnknownHandlers() {
+                return false;
+            }
+        };
+
+        SimpleAction action = new SimpleAction() {
+            @Override
+            public String doWith() throws Exception {
+                throw new IllegalArgumentException();
+            }
+        };
+        MockActionProxy proxy = new MockActionProxy();
+        proxy.setMethod("with");
+
+        dai.proxy = proxy;
+        dai.ognlUtil = new OgnlUtil();
+        dai.unknownHandlerManager = uhm;
+
+        // when
+        // when
+        Throwable actual = null;
+        try {
+            dai.invokeAction(action, null);
+        } catch (Exception e) {
+            actual = e;
+        }
+
+        // then
+        assertNotNull(actual);
+        assertTrue(actual instanceof IllegalArgumentException);
+    }
+
+    @Deprecated
+    public void testUnknownHandlerManagerThatThrowsException() throws 
Exception {
+        // given
+        DefaultActionInvocation dai = new DefaultActionInvocation(new 
HashMap<String, Object>(), false) {
+            public ValueStack getStack() {
+                return new StubValueStack();
+            }
+        };
+
+        UnknownHandlerManager uhm = new DefaultUnknownHandlerManager() {
+            @Override
+            public boolean hasUnknownHandlers() {
+                return true;
+            }
+
+            @Override
+            public Object handleUnknownMethod(Object action, String 
methodName) throws NoSuchMethodException {
+                throw new NoSuchMethodException();
+            }
+        };
+
+        SimpleAction action = new SimpleAction() {
+            @Override
+            public String doWith() throws Exception {
+                throw new IllegalArgumentException();
+            }
+        };
+        MockActionProxy proxy = new MockActionProxy();
+        proxy.setMethod("notExists");
+
+        dai.proxy = proxy;
+        dai.ognlUtil = new OgnlUtil();
+        dai.unknownHandlerManager = uhm;
+
+        // when
+        // when
+        Throwable actual = null;
+        try {
+            dai.invokeAction(action, null);
+        } catch (Exception e) {
+            actual = e;
+        }
+
+        // then
+        assertNotNull(actual);
+        assertTrue(actual instanceof NoSuchMethodException);
+    }
+
+    @Deprecated
+    public void testUnknownHandlerManagerThatReturnsNull() throws Exception {
+        // given
+        DefaultActionInvocation dai = new DefaultActionInvocation(new 
HashMap<String, Object>(), false) {
+            public ValueStack getStack() {
+                return new StubValueStack();
+            }
+        };
+
+        UnknownHandlerManager uhm = new DefaultUnknownHandlerManager() {
+            @Override
+            public boolean hasUnknownHandlers() {
+                return true;
+            }
+
+            @Override
+            public Object handleUnknownMethod(Object action, String 
methodName) throws NoSuchMethodException {
+                return null;
+            }
+        };
+
+        SimpleAction action = new SimpleAction() {
+            @Override
+            public String doWith() throws Exception {
+                throw new IllegalArgumentException();
+            }
+        };
+        MockActionProxy proxy = new MockActionProxy();
+        proxy.setMethod("notExists");
+
+        dai.proxy = proxy;
+        dai.ognlUtil = new OgnlUtil();
+        dai.unknownHandlerManager = uhm;
+
+        // when
         // when
-        Throwable expected = null;
+        Throwable actual = null;
         try {
             dai.invokeAction(action, null);
         } catch (Exception e) {
-            expected = e;
+            actual = e;
         }
 
         // then
-        assertNotNull(expected);
-        assertTrue(expected instanceof IllegalArgumentException);
+        assertNotNull(actual);
+        assertTrue(actual instanceof NoSuchMethodException);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/70273869/xwork-core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/SimpleAction.java 
b/xwork-core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
index d22d231..6a180a1 100644
--- a/xwork-core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
+++ b/xwork-core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
@@ -249,6 +249,9 @@ public class SimpleAction extends ActionSupport {
         return INPUT;
     }
 
+    public String doWith() throws Exception {
+        return "with";
+    }
 
     public long getLongFoo() {
         return longFoo;

Reply via email to