Title: [waffle-scm] [447] trunk/waffle-core/src/test/java/org/codehaus/waffle/bind: fixed NPE issue when read property missing from controller (when binding property from controller to the request to simplify view development)

Diff

Modified: trunk/examples/simple-example/src/main/java/org/codehaus/waffle/example/simple/AutomobileController.java (446 => 447)

--- trunk/examples/simple-example/src/main/java/org/codehaus/waffle/example/simple/AutomobileController.java	2007-11-30 23:10:40 UTC (rev 446)
+++ trunk/examples/simple-example/src/main/java/org/codehaus/waffle/example/simple/AutomobileController.java	2007-12-01 06:09:42 UTC (rev 447)
@@ -1,8 +1,8 @@
 package org.codehaus.waffle.example.simple;
 
-import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.validation.ErrorsContext;
 import org.codehaus.waffle.validation.FieldErrorMessage;
+import org.codehaus.waffle.i18n.MessagesContext;
 
 public class AutomobileController {
     private String make = "ford";
@@ -46,9 +46,8 @@
         return topSpeed;
     }
 
-    public void setTopSpeed(int topSpeed, MessagesContext messagesContext) {
+    public void setTopSpeed(int topSpeed) {
         this.topSpeed = topSpeed;
-        messagesContext.addMessage("success", "Set top speed "+topSpeed);
     }
 
     public void accelerate(int value) {
@@ -62,7 +61,8 @@
         }
     }
     
-    public void stop() {
+    public void stop(MessagesContext messagesContext) {
+        messagesContext.addMessage("stop", "Stop called");
         speed = 0;
     }
     

Modified: trunk/examples/simple-example/src/test/java/org/codehaus/waffle/example/simple/AutomobileControllerValidatorTest.java (446 => 447)

--- trunk/examples/simple-example/src/test/java/org/codehaus/waffle/example/simple/AutomobileControllerValidatorTest.java	2007-11-30 23:10:40 UTC (rev 446)
+++ trunk/examples/simple-example/src/test/java/org/codehaus/waffle/example/simple/AutomobileControllerValidatorTest.java	2007-12-01 06:09:42 UTC (rev 447)
@@ -1,9 +1,7 @@
 package org.codehaus.waffle.example.simple;
 
 import org.codehaus.waffle.i18n.DefaultMessageResources;
-import org.codehaus.waffle.i18n.DefaultMessagesContext;
 import org.codehaus.waffle.i18n.MessageResources;
-import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.validation.DefaultErrorsContext;
 import org.codehaus.waffle.validation.ErrorMessage;
 import org.codehaus.waffle.validation.ErrorsContext;
@@ -22,11 +20,8 @@
 
         AutomobileController controller = new AutomobileController();
         controller.setSpeed(50);
-        MessagesContext messagesContext = new DefaultMessagesContext(null);
-        controller.setTopSpeed(150, messagesContext);
+        controller.setTopSpeed(150);
 
-        assertEquals("Set top speed 150", messagesContext.getMessage("success"));
-
         AutomobileControllerValidator validator = new AutomobileControllerValidator(controller, messageResources);
         ErrorsContext errorsContext = new DefaultErrorsContext(null);
         validator.accelerate(errorsContext, 15);
@@ -40,7 +35,7 @@
 
         AutomobileController controller = new AutomobileController();
         controller.setSpeed(140);
-        controller.setTopSpeed(150, new DefaultMessagesContext(null));
+        controller.setTopSpeed(150);
 
         AutomobileControllerValidator validator = new AutomobileControllerValidator(controller, messageResources);
         ErrorsContext errorsContext = new DefaultErrorsContext(null);

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java (446 => 447)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java	2007-11-30 23:10:40 UTC (rev 446)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java	2007-12-01 06:09:42 UTC (rev 447)
@@ -1,5 +1,12 @@
 package org.codehaus.waffle.bind;
 
+import org.codehaus.waffle.WaffleException;
+import org.codehaus.waffle.controller.RubyController;
+import org.codehaus.waffle.monitor.BindMonitor;
+import org.jruby.javasupport.JavaEmbedUtils;
+import org.jruby.runtime.builtin.IRubyObject;
+
+import javax.servlet.http.HttpServletRequest;
 import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
 import java.beans.Introspector;
@@ -9,14 +16,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.codehaus.waffle.WaffleException;
-import org.codehaus.waffle.controller.RubyController;
-import org.codehaus.waffle.monitor.BindMonitor;
-import org.jruby.javasupport.JavaEmbedUtils;
-import org.jruby.runtime.builtin.IRubyObject;
-
 /**
  * This implementation can handle all standard Java objects and RubyControllers are handled specially (instance_variables)
  * 
@@ -43,8 +42,8 @@
 
             for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
                 Method readMethod = propertyDescriptor.getReadMethod();
-                // skip getClass() method and any get/is methods that take arguments
-                if (readMethod.getParameterTypes().length == 0 && !readMethod.getName().equals("getClass")) {
+
+                if(readMethod != null && readMethod.getParameterTypes().length == 0 && !readMethod.getName().equals("getClass")) {
                     request.setAttribute(propertyDescriptor.getName(), readMethod.invoke(controller));
                 }
             }

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java (446 => 447)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java	2007-11-30 23:10:40 UTC (rev 446)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java	2007-12-01 06:09:42 UTC (rev 447)
@@ -1,7 +1,5 @@
 package org.codehaus.waffle.bind;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.codehaus.waffle.controller.RubyController;
 import org.codehaus.waffle.monitor.SilentMonitor;
 import org.jmock.Expectations;
@@ -12,6 +10,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import javax.servlet.http.HttpServletRequest;
+
 @RunWith(JMock.class)
 public class IntrospectingRequestAttributeBinderTest {
     private final Mockery context = new Mockery();
@@ -29,6 +29,14 @@
         binder.bind(request, new SimpleController());
     }
 
+    @Test
+    public void shouldNotThrowNullPointerExceptionWhenControllerMissingReadMethodForProperty() {
+        final ControllerWithMissingReadMethod controller = new ControllerWithMissingReadMethod();
+
+        IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(new SilentMonitor());
+        binder.bind(null, controller);
+    }
+
     class SimpleController {
         private String name = "my controller";
 
@@ -41,6 +49,13 @@
         }
     }
 
+    class ControllerWithMissingReadMethod {
+        @SuppressWarnings({"UnusedDeclaration"})
+        public void setName(String name) {
+            // do nothing
+        }
+    }
+
     @Test
     public void rubyInstanceVariablesShouldBeBound() {
         String rubyScript =

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java (446 => 447)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java	2007-11-30 23:10:40 UTC (rev 446)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java	2007-12-01 06:09:42 UTC (rev 447)
@@ -1,13 +1,8 @@
 package org.codehaus.waffle.testmodel;
 
-import java.lang.reflect.Method;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletResponse;
-
 import org.codehaus.waffle.action.ActionMethodResponse;
-import org.codehaus.waffle.action.MethodDefinition;
 import org.codehaus.waffle.action.HierarchicalArgumentResolver.Scope;
+import org.codehaus.waffle.action.MethodDefinition;
 import org.codehaus.waffle.context.ContextContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.monitor.ActionMonitor;
@@ -24,6 +19,10 @@
 import org.codehaus.waffle.view.ResponderView;
 import org.codehaus.waffle.view.View;
 
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
+import java.util.Set;
+
 public class StubMonitor implements ActionMonitor, BindMonitor, ContextMonitor, ControllerMonitor, RegistrarMonitor,
         ServletMonitor, ValidationMonitor, ViewMonitor {
 
@@ -117,7 +116,7 @@
     public void controllerValidatorNotFound(String controllerValidatorName, String controllerName) {
     }
 
-    public void methodDefinitionNotFound(ControllerDefinition controllerDefinition) {        
+    public void methodDefinitionNotFound(ControllerDefinition controllerDefinition) {
     }
 
     public void validationFailed(Exception cause) {


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to