You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/12/10 22:07:12 UTC

svn commit: r485258 - in /tapestry/tapestry4/trunk: ./ tapestry-framework/src/java/org/apache/tapestry/ tapestry-framework/src/java/org/apache/tapestry/components/ tapestry-framework/src/java/org/apache/tapestry/services/impl/ tapestry-framework/src/ja...

Author: jkuhnert
Date: Sun Dec 10 13:07:10 2006
New Revision: 485258

URL: http://svn.apache.org/viewvc?view=rev&rev=485258
Log:
Fixes for TAPESTRY-736.

Added new ForBean test to cover very basic scenarios.

Added:
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java
Modified:
    tapestry/tapestry4/trunk/.checkstyle
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java

Modified: tapestry/tapestry4/trunk/.checkstyle
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/.checkstyle?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/.checkstyle (original)
+++ tapestry/tapestry4/trunk/.checkstyle Sun Dec 10 13:07:10 2006
@@ -8,16 +8,15 @@
     </fileset>
     <filter name="FilesFromPackage" enabled="true">
         <filter-data value="tapestry-framework/src/test"/>
-        <filter-data value="tapestry-examples/VlibBeans/src/test"/>
-        <filter-data value="tapestry-examples/Vlib/src/test"/>
-        <filter-data value="tapestry-framework/src/descriptor"/>
-        <filter-data value="tapestry-contrib/src/descriptor"/>
         <filter-data value="tapestry-portlet/src/test"/>
-        <filter-data value="tapestry-annotations/src/descriptor"/>
-        <filter-data value="tapestry-portlet/src/descriptor"/>
         <filter-data value="tapestry-examples/Workbench/src/test"/>
+        <filter-data value="tapestry-framework/src/js"/>
         <filter-data value="tapestry-contrib/src/test"/>
         <filter-data value="tapestry-annotations/src/test"/>
+        <filter-data value="tapestry-annotations/src/descriptor"/>
+        <filter-data value="tapestry-contrib/src/descriptor"/>
+        <filter-data value="tapestry-framework/src/descriptor"/>
+        <filter-data value="tapestry-portlet/src/descriptor"/>
     </filter>
     <filter name="NonSrcDirs" enabled="true"/>
 </fileset-config>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java Sun Dec 10 13:07:10 2006
@@ -31,10 +31,23 @@
      * as a function parameter, or as a property assignment. A typical return value might be
      * <code>tapestry_preload[7].src</code>.
      * 
-     * @deprecated To be removed in 4.2, use {@link #getPreloadedImageReference(IComponent, String)} instead.
+     * @deprecated To be removed in 4.2, use {@link #getPreloadedImageReference(IComponent, String)} 
+     *              or {@link #getPreloadedImageReference(IComponent, IAsset)} instead.
      */
 
     String getPreloadedImageReference(String url);
+    
+    /**
+     * Operates in the same way that {@link #getPreloadedImageReference(IComponent, String)} does, except 
+     * the source is the actual {@link IAsset} of an image to preload. 
+     * 
+     * @param target
+     *          The component the asset is being loaded for.
+     * @param source
+     *          The asset image to preload.
+     * @return The url representing the image that can be safely retrieved by the browser to see it.
+     */
+    String getPreloadedImageReference(IComponent target, IAsset source);
     
     /**
      * Sets up the given URL to preload, and returns a reference to the loaded image, in the form of

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java Sun Dec 10 13:07:10 2006
@@ -79,7 +79,7 @@
     public abstract boolean getRenderTag();
     
     public abstract String getElement();
-
+    
     public abstract String getKeyExpression();
 
     public abstract IPrimaryKeyConverter getConverter();
@@ -556,7 +556,7 @@
         // Check if the string rep is empty. If so, just return the default value.
         if (rep == null || rep.length() == 0)
             return getDefaultValue();
-
+        
         // If required, find a value with an equivalent string representation and return it
         boolean match = getMatch();
         if (match)
@@ -583,7 +583,7 @@
                 // If the string rep is just the value itself, unsqueeze it
                 value = squeezer.unsqueeze(squeezed);
                 break;
-
+                
             case DESC_PRIMARY_KEY:
                 // Perform keyExpression match if not already attempted
                 if (!match && getKeyExpression() != null)
@@ -635,7 +635,7 @@
         value = findValueWithStringRepInIterator(sourceIterator, repToValueMap, rep, repSource);
         if (value != null)
             return value;
-
+        
         value = findValueWithStringRepInIterator(fullSourceIterator, repToValueMap, rep, repSource);
         return value;
     }
@@ -662,10 +662,10 @@
             Object sourceValue = it.next();
             if (sourceValue == null)
                 continue;
-
+            
             String sourceRep = repSource.getStringRep(sourceValue);
             repToValueMap.put(sourceRep, sourceValue);
-
+            
             if (rep.equals(sourceRep))
                 return sourceValue;
         }
@@ -686,10 +686,10 @@
         IBinding sourceBinding = getBinding("source");
         if (sourceBinding != null)
             source = sourceBinding.getObject();
-
+        
         if (source != null)
             it = (Iterator) getValueConverter().coerceValue(source, Iterator.class);
-
+        
         if (it == null)
             it = Collections.EMPTY_LIST.iterator();
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java Sun Dec 10 13:07:10 2006
@@ -18,6 +18,7 @@
 
 import org.apache.hivemind.Resource;
 import org.apache.hivemind.util.Defense;
+import org.apache.tapestry.IAsset;
 import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IPage;
@@ -248,6 +249,14 @@
     public boolean isImageInitializationAllowed(IComponent target)
     {
         return true;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getPreloadedImageReference(IComponent target, IAsset source)
+    {
+        return _prs.getPreloadedImageReference(target, source);
     }
     
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java Sun Dec 10 13:07:10 2006
@@ -26,6 +26,7 @@
 
 import org.apache.hivemind.Resource;
 import org.apache.hivemind.util.Defense;
+import org.apache.tapestry.IAsset;
 import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IForm;
 import org.apache.tapestry.IMarkupWriter;
@@ -329,6 +330,14 @@
             return true;
         
         return contains(target);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getPreloadedImageReference(IComponent target, IAsset source)
+    {
+        return _prs.getPreloadedImageReference(target, source);
     }
     
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java Sun Dec 10 13:07:10 2006
@@ -24,6 +24,7 @@
 
 import org.apache.hivemind.Resource;
 import org.apache.hivemind.util.Defense;
+import org.apache.tapestry.IAsset;
 import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IJSONRender;
 import org.apache.tapestry.IMarkupWriter;
@@ -333,6 +334,14 @@
     public boolean isImageInitializationAllowed(IComponent target)
     {
         return false;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getPreloadedImageReference(IComponent target, IAsset source)
+    {
+        return _prs.getPreloadedImageReference(target, source);
     }
     
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java Sun Dec 10 13:07:10 2006
@@ -107,9 +107,15 @@
         return getPreloadedImageReference(null, URL);
     }
     
+    public String getPreloadedImageReference(IComponent target, IAsset source)
+    {
+        return getPreloadedImageReference(target, source.buildURL());
+    }
+    
     public String getPreloadedImageReference(IComponent target, String URL)
     {
-        if (target != null && !_builder.isImageInitializationAllowed(target))
+        if (target != null 
+                && !_builder.isImageInitializationAllowed(target))
             return URL;
         
         if (_imageMap == null)

Added: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java?view=auto&rev=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java Sun Dec 10 13:07:10 2006
@@ -0,0 +1,153 @@
+// Copyright 2004, 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry.components;
+
+import static org.easymock.EasyMock.*;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.IBinding;
+import org.apache.tapestry.IForm;
+import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRender;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.TapestryUtils;
+import org.apache.tapestry.coerce.ValueConverter;
+import org.apache.tapestry.services.ResponseBuilder;
+import org.apache.tapestry.spec.IComponentSpecification;
+import org.apache.tapestry.spec.IParameterSpecification;
+import org.testng.annotations.Test;
+
+
+/**
+ * Tests functionality of {@link ForBean} .
+ *
+ * @author jkuhnert
+ */
+@Test
+public class TestForBean extends BaseComponentTestCase
+{   
+    public void test_Render()
+    {
+        IRequestCycle cycle = newMock(IRequestCycle.class);
+        IMarkupWriter writer = newBufferWriter();
+        ValueConverter conv = newMock(ValueConverter.class);
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
+        IComponentSpecification spec = newSpec();
+        IParameterSpecification pspec = newMock(IParameterSpecification.class);
+        
+        List src = new ArrayList();
+        src.add("Test1");
+        src.add("Test2");
+        
+        IBinding source = newBinding(src);
+        
+        ForBean bean = newInstance(ForBean.class, new Object[] {
+            "valueConverter", conv,
+            "responseBuilder", resp,
+            "templateTagName", "div",
+            "renderTag", true,
+            "specification", spec
+            });
+        
+        expect(cycle.renderStackPush(bean)).andReturn(bean);
+        
+        expect(cycle.isRewinding()).andReturn(false);
+        
+        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(null);
+        
+        expect(spec.getParameter("source")).andReturn(pspec).anyTimes();
+        
+        expect(conv.coerceValue(src, Iterator.class)).andReturn(src.iterator());
+        
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
+        
+        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
+        
+        IRender body = newMock(IRender.class);
+        
+        resp.render(writer, body, cycle);
+        expectLastCall().anyTimes();
+        
+        expect(cycle.renderStackPop()).andReturn(bean);
+        
+        replay();
+        
+        bean.addBody(body);
+        bean.setBinding("source", source);
+        
+        bean.render(writer, cycle);
+        
+        verify();
+        
+        assertBuffer("<div></div><div></div>");
+    }
+    
+    public void test_Rewind_Missing_Converter()
+    {
+        IRequestCycle cycle = newMock(IRequestCycle.class);
+        IMarkupWriter writer = newWriter();
+        ValueConverter conv = newMock(ValueConverter.class);
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
+        IForm form = newMock(IForm.class);
+        IComponentSpecification spec = newSpec();
+       // IParameterSpecification pspec = newMock(IParameterSpecification.class);
+        
+        List src = new ArrayList();
+        src.add("Test1");
+        src.add("Test2");
+        
+        IBinding source = newBinding(src);
+        
+        ForBean bean = newInstance(ForBean.class, new Object[] {
+            "valueConverter", conv,
+            "responseBuilder", resp,
+            "templateTagName", "div",
+            "renderTag", true,
+            "specification", spec
+            });
+        
+        expect(cycle.renderStackPush(bean)).andReturn(bean);
+        
+        expect(cycle.isRewinding()).andReturn(true).anyTimes();
+        
+        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
+        
+        expect(form.isRewinding()).andReturn(true);
+        
+        expect(form.getElementId(bean)).andReturn("foo");
+        
+        String[] parms = (String[])src.toArray((new String[src.size()]));
+        
+        expect(cycle.getParameters("foo")).andReturn(parms);
+        
+        expect(conv.coerceValue(src, Iterator.class)).andReturn(src.iterator());
+        
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
+        
+        expect(cycle.renderStackPop()).andReturn(bean);
+        
+        replay();
+        
+        // bean.addBody(body);
+        bean.setBinding("source", source);
+        
+        bean.render(writer, cycle);
+        
+        verify();
+    }
+}

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java Sun Dec 10 13:07:10 2006
@@ -44,7 +44,7 @@
         IRender render = newMock(IRender.class);
         
         render.render(writer, cycle);
-
+        
         return render;
     }
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java Sun Dec 10 13:07:10 2006
@@ -34,6 +34,7 @@
  * @author jkuhnert
  */
 @Test(sequential=true)
+@SuppressWarnings("all")
 public class AjaxShellDelegateTest extends BaseComponentTestCase
 {
     private static final String SYSTEM_NEWLINE= (String)java.security.AccessController.doPrivileged(

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java?view=diff&rev=485258&r1=485257&r2=485258
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java Sun Dec 10 13:07:10 2006
@@ -24,6 +24,7 @@
 import org.apache.hivemind.Resource;
 import org.apache.tapestry.BaseComponentTestCase;
 import org.apache.tapestry.IAsset;
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.asset.AssetFactory;
@@ -40,19 +41,20 @@
  * @since 4.0
  */
 @Test(sequential=true)
+@SuppressWarnings("all")
 public class TestPageRenderSupport extends BaseComponentTestCase
 {
     private static final String SYSTEM_NEWLINE= (String)java.security.AccessController.doPrivileged(
             new sun.security.action.GetPropertyAction("line.separator"));
     
     private static final String TEST_NEWLINE= "\n";
-
+    
     private AssetFactory newAssetFactory()
     {
         return newMock(AssetFactory.class);
     }
 
-    private IAsset newAsset(IRequestCycle cycle, String url)
+    private IAsset newAsset(String url)
     {
         IAsset asset = newMock(IAsset.class);
         checkOrder(asset, false);
@@ -126,15 +128,18 @@
         Location l = newLocation();
         IRequestCycle cycle = newCycle();
         IMarkupWriter writer = createWriter();
-
+        
+        IComponent comp = newMock(IComponent.class);
+        IAsset img = newAsset("/zip/zap.png");
+        
         replay();
-
+        
         PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, newBuilder(writer));
-
+        
         assertEquals(prs.getPreloadedImageReference("/foo/bar.gif"), "tapestry.preload[0].src");
-        assertEquals(prs.getPreloadedImageReference("/zip/zap.png"), "tapestry.preload[1].src");
+        assertEquals(prs.getPreloadedImageReference(comp, img), "tapestry.preload[1].src");
         assertEquals(prs.getPreloadedImageReference("/foo/bar.gif"), "tapestry.preload[0].src");
-
+        
         prs.addBodyScript("myBodyScript();");
 
         prs.writeBodyScript(writer, cycle);
@@ -282,11 +287,11 @@
         AssetFactory assetFactory = newMock(AssetFactory.class);
         
         Resource script1 = newResource();
-        IAsset asset1 = newAsset(cycle, "/script1.js");
+        IAsset asset1 = newAsset("/script1.js");
         
         Resource script2 = newResource();
-        IAsset asset2 = newAsset(cycle, "/script2.js");
-
+        IAsset asset2 = newAsset("/script2.js");
+        
         expect(assetFactory.createAsset(script1, null)).andReturn(asset1);
 
         expect(assetFactory.createAsset(script2, null)).andReturn(asset2);