Author: apetrelli
Date: Fri Jan 21 20:45:36 2011
New Revision: 1062019

URL: http://svn.apache.org/viewvc?rev=1062019&view=rev
Log:
TILES-519
Applied a modified patch by Vitaly Polonetsky.
Fixed a problem with compose stack not accepting null values.

Modified:
    
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
    
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
    
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
    
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java

Modified: 
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
URL: 
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
--- 
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
 (original)
+++ 
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
 Fri Jan 21 20:45:36 2011
@@ -106,16 +106,20 @@ public class GetAsStringModel {
             String defaultValueType, @Parameter(required = true) String name,
             Attribute value, Request request, ModelBody modelBody)
             throws IOException {
-    TilesContainer container = TilesAccess.getCurrentContainer(request);
+        TilesContainer container = TilesAccess.getCurrentContainer(request);
         Deque<Object> composeStack = ComposeStackUtil.getComposeStack(request);
         Attribute attribute = resolveAttribute(container, ignore, preparer,
                 role, defaultValue, defaultValueRole, defaultValueType, name,
                 value, request);
-        composeStack.push(attribute);
+        if (attribute != null) {
+            composeStack.push(attribute);
+        }
         modelBody.evaluateWithoutWriting();
         container = TilesAccess.getCurrentContainer(request);
         Writer writer = request.getWriter();
-        attribute = (Attribute) composeStack.pop();
+        if (attribute != null) {
+            attribute = (Attribute) composeStack.pop();
+        }
         renderAttribute(attribute, container, writer, ignore, request);
     }
 
@@ -167,10 +171,10 @@ public class GetAsStringModel {
     private void renderAttribute(Attribute attribute, TilesContainer container,
             Writer writer, boolean ignore, Request request)
             throws IOException {
-        if (attribute == null && ignore) {
-            return;
-        }
         try {
+            if (attribute == null && ignore) {
+                return;
+            }
             writer.write(attribute.getValue().toString());
         } catch (IOException e) {
             if (!ignore) {

Modified: 
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
URL: 
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
--- 
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
 (original)
+++ 
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
 Fri Jan 21 20:45:36 2011
@@ -122,10 +122,14 @@ public class InsertAttributeModel {
         Attribute attribute = resolveAttribute(container, ignore, preparer,
                 role, defaultValue, defaultValueRole, defaultValueType, name,
                 value, request);
-        composeStack.push(attribute);
+        if (attribute != null) {
+            composeStack.push(attribute);
+        }
         modelBody.evaluateWithoutWriting();
         container = TilesAccess.getCurrentContainer(request);
-        attribute = (Attribute) composeStack.pop();
+        if (attribute != null) {
+            attribute = (Attribute) composeStack.pop();
+        }
         renderAttribute(container, ignore, attribute, request);
         if (flush) {
             request.getWriter().flush();

Modified: 
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
URL: 
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
--- 
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
 (original)
+++ 
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
 Fri Jan 21 20:45:36 2011
@@ -106,4 +106,40 @@ public class GetAsStringModelTest {
         verify(resolver, container, writer, request, applicationContext, 
modelBody);
     }
 
+    /**
+     * Test method for {@link org.apache.tiles.template.GetAsStringModel
+     * #execute(boolean, java.lang.String, java.lang.String,
+     * java.lang.Object, java.lang.String, java.lang.String, java.lang.String,
+     * org.apache.tiles.Attribute, Request, ModelBody)} when ignore flag is 
set.
+     * @throws IOException If something goes wrong.
+     */
+    @Test
+    public void testExecuteIgnore() throws IOException {
+        TilesContainer container = createMock(TilesContainer.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        Request request = createMock(Request.class);
+        Writer writer = createMock(Writer.class);
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        Deque<Object> composeStack = new ArrayDeque<Object>();
+        requestScope.put(ComposeStackUtil.COMPOSE_STACK_ATTRIBUTE_NAME, 
composeStack);
+        requestScope.put(TilesAccess.CURRENT_CONTAINER_ATTRIBUTE_NAME, 
container);
+        ApplicationContext applicationContext = 
createMock(ApplicationContext.class);
+        ModelBody modelBody = createMock(ModelBody.class);
+
+        modelBody.evaluateWithoutWriting();
+        
expect(request.getApplicationContext()).andReturn(applicationContext).times(2);
+        
expect(request.getContext("request")).andReturn(requestScope).anyTimes();
+        expect(request.getWriter()).andReturn(writer);
+        container.prepare("myPreparer", request);
+        expect(resolver.computeAttribute(container, null, "myName", "myRole", 
true, "myDefaultValue",
+                "myDefaultValueRole", "myDefaultValueType", 
request)).andReturn(null);
+        expect(container.startContext(request)).andReturn(attributeContext);
+        container.endContext(request);
+
+        replay(resolver, container, writer, request, applicationContext, 
modelBody);
+        model.execute(true, "myPreparer", "myRole", "myDefaultValue", 
"myDefaultValueRole", "myDefaultValueType",
+                "myName", null, request, modelBody);
+        verify(resolver, container, writer, request, applicationContext, 
modelBody);
+    }
+
 }

Modified: 
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
URL: 
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
--- 
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
 (original)
+++ 
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
 Fri Jan 21 20:45:36 2011
@@ -24,6 +24,8 @@ package org.apache.tiles.template;
 import static org.easymock.EasyMock.*;
 
 import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -32,6 +34,7 @@ import org.apache.tiles.AttributeContext
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.autotag.core.runtime.ModelBody;
+import org.apache.tiles.autotag.core.runtime.composition.ComposeStackUtil;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
 import org.junit.Before;
@@ -97,4 +100,37 @@ public class InsertAttributeModelTest {
         verify(resolver, container, request, applicationContext, modelBody);
     }
 
+    /**
+     * Test method for {@link org.apache.tiles.template.InsertAttributeModel
+     * #execute(boolean, String, String, Object, String, String, String,
+     * Attribute, boolean, Request, ModelBody)} when ignore flag is set.
+     * @throws IOException If something goes wrong.
+     */
+    @Test
+    public void testExecuteIgnore() throws IOException {
+        TilesContainer container = createMock(TilesContainer.class);
+        Request request = createMock(Request.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        Deque<Object> composeStack = new ArrayDeque<Object>();
+        requestScope.put(ComposeStackUtil.COMPOSE_STACK_ATTRIBUTE_NAME, 
composeStack);
+        requestScope.put(TilesAccess.CURRENT_CONTAINER_ATTRIBUTE_NAME, 
container);
+        ApplicationContext applicationContext = 
createMock(ApplicationContext.class);
+        ModelBody modelBody = createMock(ModelBody.class);
+
+        modelBody.evaluateWithoutWriting();
+        
expect(request.getApplicationContext()).andReturn(applicationContext).times(2);
+        
expect(request.getContext("request")).andReturn(requestScope).anyTimes();
+
+        container.prepare("myPreparer", request);
+        expect(resolver.computeAttribute(container, null, "myName", "myRole", 
true, "myDefaultValue",
+                "myDefaultValueRole", "myDefaultValueType", 
request)).andReturn(null);
+        expect(container.startContext(request)).andReturn(attributeContext);
+        container.endContext(request);
+
+        replay(resolver, container, request, applicationContext, modelBody);
+        model.execute(true, "myPreparer", "myRole", "myDefaultValue", 
"myDefaultValueRole",
+                "myDefaultValueType", "myName", null, false, request, 
modelBody);
+        verify(resolver, container, request, applicationContext, modelBody);
+    }
 }


Reply via email to