Author: lukaszlenart
Date: Thu Dec 13 10:42:09 2012
New Revision: 1421210
URL: http://svn.apache.org/viewvc?rev=1421210&view=rev
Log:
WW-3942 solves NPE in iterator tag
Added:
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/IteratorComponentTest.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java?rev=1421210&r1=1421209&r2=1421210&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java
Thu Dec 13 10:42:09 2012
@@ -21,19 +21,18 @@
package org.apache.struts2.components;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Arrays;
-
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import org.apache.struts2.util.MakeIterator;
import org.apache.struts2.views.annotations.StrutsTag;
import org.apache.struts2.views.annotations.StrutsTagAttribute;
-import org.apache.struts2.util.MakeIterator;
import org.apache.struts2.views.jsp.IteratorStatus;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.logging.Logger;
-import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import java.io.Writer;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
/**
* <!-- START SNIPPET: javadoc -->
@@ -357,7 +356,7 @@ public class IteratorComponent extends C
}
}
- class CounterIterator implements Iterator<Object> {
+ static class CounterIterator implements Iterator<Object> {
private int step;
private int end;
private int currentIndex;
@@ -380,7 +379,7 @@ public class IteratorComponent extends C
if (hasNext()) {
int nextIndex = peekNextIndex();
currentIndex += step;
- return value != null ? values.get(nextIndex) : nextIndex;
+ return values != null ? values.get(nextIndex) : nextIndex;
} else {
throw new IndexOutOfBoundsException("Index " + ( currentIndex
+ step) + " must be less than or equal to " + end);
}
Added:
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/IteratorComponentTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/IteratorComponentTest.java?rev=1421210&view=auto
==============================================================================
---
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/IteratorComponentTest.java
(added)
+++
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/IteratorComponentTest.java
Thu Dec 13 10:42:09 2012
@@ -0,0 +1,91 @@
+package org.apache.struts2.components;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.StrutsTestCase;
+
+import java.io.StringWriter;
+import java.util.Arrays;
+import java.util.List;
+
+public class IteratorComponentTest extends StrutsTestCase {
+
+ public void testIterator() throws Exception {
+ // given
+ final ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(new FooAction());
+
+ StringWriter out = new StringWriter();
+
+ IteratorComponent ic = new IteratorComponent(stack);
+ ic.setValue("items");
+ ic.setVar("val");
+
+ Property prop = new Property(stack);
+
+ ic.getComponentStack().push(prop);
+ ic.getComponentStack().push(prop);
+ ic.getComponentStack().push(prop);
+ ic.getComponentStack().push(prop);
+
+ String body = " ";
+
+ // when
+ assertTrue(ic.start(out));
+
+
+ for (int i = 0; i < 4; i++) {
+ prop.start(out);
+ prop.end(out, body);
+ ic.end(out, null);
+ }
+
+ // then
+ assertEquals("item1 item2 item3 item4 ", out.getBuffer().toString());
+ }
+
+ public void testIteratorWithBegin() throws Exception {
+ // given
+ final ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(new FooAction());
+
+ StringWriter out = new StringWriter();
+
+ IteratorComponent ic = new IteratorComponent(stack);
+ ic.setValue("items");
+ ic.setVar("val");
+ ic.setBegin("1");
+ Property prop = new Property(stack);
+
+ ic.getComponentStack().push(prop);
+ ic.getComponentStack().push(prop);
+ ic.getComponentStack().push(prop);
+
+ String body = " ";
+
+ // when
+ assertTrue(ic.start(out));
+
+ for (int i = 0; i < 3; i++) {
+ prop.start(out);
+ prop.end(out, body);
+ ic.end(out, null);
+ }
+
+ // then
+ assertEquals("item2 item3 item4 ", out.getBuffer().toString());
+ }
+
+ static class FooAction {
+
+ private List items;
+
+ public FooAction() {
+ items = Arrays.asList("item1", "item2", "item3", "item4");
+ }
+
+ public List getItems() {
+ return items;
+ }
+ }
+}