You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/10/01 14:14:17 UTC

svn commit: r292966 - in /jakarta/tapestry/trunk: ./ .settings/ framework/src/java/org/apache/tapestry/ framework/src/java/org/apache/tapestry/html/ framework/src/java/org/apache/tapestry/valid/ framework/src/test/org/apache/tapestry/ framework/src/tes...

Author: hlship
Date: Sat Oct  1 05:14:07 2005
New Revision: 292966

URL: http://svn.apache.org/viewcvs?rev=292966&view=rev
Log:
TAPESTRY-622: Add streamlined API for recording errors into a validation delegate
TAPESTRY-667: Methods marked deprecated in IComponent need to also be deprecated in AbstractComponent to avoid compiler warnings (when subclassing)
Add test suites for Frame, Describe and Script components

Added:
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/DescribeTest.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/FrameTest.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/ScriptTest.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java
      - copied, changed from r292042, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/TestValidationDelegate.java
Removed:
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/TestValidationDelegate.java
Modified:
    jakarta/tapestry/trunk/.settings/org.eclipse.jdt.core.prefs
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.jwc
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.jwc
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/MockDelegate.java
    jakarta/tapestry/trunk/status.xml

Modified: jakarta/tapestry/trunk/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/.settings/org.eclipse.jdt.core.prefs?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/.settings/org.eclipse.jdt.core.prefs (original)
+++ jakarta/tapestry/trunk/.settings/org.eclipse.jdt.core.prefs Sat Oct  1 05:14:07 2005
@@ -1,4 +1,4 @@
-#Thu Aug 25 21:35:11 PDT 2005
+#Fri Sep 30 15:48:02 EDT 2005
 eclipse.preferences.version=1
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
@@ -18,7 +18,7 @@
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=error

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java Sat Oct  1 05:14:07 2005
@@ -710,6 +710,7 @@
      * 
      * @see IComponent
      * @since 3.0
+     * @deprecated
      */
     public void setProperty(String propertyName, Object value)
     {
@@ -721,6 +722,7 @@
      * 
      * @see IComponent
      * @since 3.0
+     * @deprecated
      */
     public Object getProperty(String propertyName)
     {

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.java Sat Oct  1 05:14:07 2005
@@ -15,10 +15,8 @@
 package org.apache.tapestry.html;
 
 import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IEngine;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
 
@@ -31,13 +29,16 @@
 
 public abstract class Frame extends AbstractComponent
 {
+    /**
+     * Injected engine service.
+     * 
+     * @since 4.0
+     */
+    public abstract IEngineService getPageService();
+
     protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
     {
-        if (cycle.isRewinding())
-            return;
-
-        IEngine engine = cycle.getEngine();
-        IEngineService pageService = engine.getService(Tapestry.PAGE_SERVICE);
+        IEngineService pageService = getPageService();
         ILink link = pageService.getLink(cycle, false, getTargetPage());
 
         writer.beginEmpty("frame");

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.jwc
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.jwc?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.jwc (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Frame.jwc Sat Oct  1 05:14:07 2005
@@ -19,7 +19,7 @@
   "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
   "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
 	
-<component-specification class="org.apache.tapestry.html.Frame" 
+<component-specification class="org.apache.tapestry.html.Frame"
     allow-body="no"
     allow-informal-parameters="yes">
 
@@ -34,5 +34,7 @@
   </parameter>
   
   <reserved-parameter name="src"/>
+  
+  <inject property="pageService" object="engine-service:page"/>
   
 </component-specification>

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.java Sat Oct  1 05:14:07 2005
@@ -42,6 +42,14 @@
 public abstract class Script extends AbstractComponent
 {
     /**
+     * Injected
+     * 
+     * @since 4.0
+     */
+
+    public abstract IScriptSource getScriptSource();
+
+    /**
      * A Map of input and output symbols visible to the body of the Script.
      * 
      * @since 2.2
@@ -93,15 +101,14 @@
      * Gets the {@link IScript}for the correct script.
      */
 
-    private IScript getParsedScript(IRequestCycle cycle)
+    private IScript getParsedScript()
     {
         String scriptPath = getScriptPath();
 
         if (scriptPath == null)
             throw Tapestry.createRequiredParameterException(this, "scriptPath");
 
-        IEngine engine = cycle.getEngine();
-        IScriptSource source = engine.getScriptSource();
+        IScriptSource source = getScriptSource();
 
         // If the script path is relative, it should be relative to the Script component's
         // container (i.e., relative to a page in the application).
@@ -115,7 +122,8 @@
         }
         catch (RuntimeException ex)
         {
-            throw new ApplicationRuntimeException(ex.getMessage(), this, null, ex);
+            throw new ApplicationRuntimeException(ex.getMessage(), this, getBinding("script")
+                    .getLocation(), ex);
         }
 
     }
@@ -128,7 +136,7 @@
 
             _symbols = getInputSymbols();
 
-            getParsedScript(cycle).execute(cycle, pageRenderSupport, _symbols);
+            getParsedScript().execute(cycle, pageRenderSupport, _symbols);
         }
 
         // Render the body of the Script;

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.jwc
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.jwc?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.jwc (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/html/Script.jwc Sat Oct  1 05:14:07 2005
@@ -38,4 +38,6 @@
     </description>
   </parameter>
 
+  <inject property="scriptSource" object="infrastructure:scriptSource"/>
+  
 </component-specification>

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java Sat Oct  1 05:14:07 2005
@@ -183,6 +183,19 @@
     public void record(String message, ValidationConstraint constraint);
 
     /**
+     * Convienience for recording a standard string messages against a field.
+     * 
+     * @param field
+     *            the field to record the error message against, or null to record an unassociated
+     *            error
+     * @param message
+     *            the error message to record
+     * @since 4.0
+     */
+
+    public void record(IFormComponent field, String message);
+
+    /**
      * Records an error in the current component, or an unassociated error. The maximum flexibility
      * recorder.
      * 

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java Sat Oct  1 05:14:07 2005
@@ -223,6 +223,15 @@
         tracking.setConstraint(constraint);
     }
 
+    /** @since 4.0 */
+
+    public void record(IFormComponent field, String message)
+    {
+        setFormComponent(field);
+
+        record(message, null);
+    }
+
     public void recordFieldInputValue(String input)
     {
         FieldTracking tracking = findCurrentTracking();

Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java Sat Oct  1 05:14:07 2005
@@ -20,7 +20,10 @@
 import org.apache.hivemind.ClassResolver;
 import org.apache.hivemind.Locatable;
 import org.apache.hivemind.Location;
+import org.apache.hivemind.Resource;
 import org.apache.hivemind.test.HiveMindTestCase;
+import org.apache.tapestry.engine.IEngineService;
+import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.markup.AsciiMarkupFilter;
 import org.apache.tapestry.markup.MarkupWriterImpl;
 import org.apache.tapestry.spec.IComponentSpecification;
@@ -102,7 +105,7 @@
     protected void trainIsRewinding(IRequestCycle cycle, boolean rewinding)
     {
         cycle.isRewinding();
-        setReturnValue(cycle,rewinding);
+        setReturnValue(cycle, rewinding);
     }
 
     protected IRequestCycle newCycleGetPage(String pageName, IPage page)
@@ -279,14 +282,14 @@
     {
         page.getPageName();
 
-        setReturnValue(page,pageName);
+        setReturnValue(page, pageName);
     }
 
     protected void trainBuildURL(IAsset asset, IRequestCycle cycle, String URL)
     {
         asset.buildURL(cycle);
 
-        setReturnValue(asset,URL);
+        setReturnValue(asset, URL);
     }
 
     protected IAsset newAsset()
@@ -299,7 +302,7 @@
         IEngine engine = (IEngine) newMock(IEngine.class);
 
         engine.getClassResolver();
-        setReturnValue(engine,resolver);
+        setReturnValue(engine, resolver);
 
         return engine;
     }
@@ -308,7 +311,7 @@
     {
         page.getEngine();
 
-        setReturnValue(page,engine);
+        setReturnValue(page, engine);
     }
 
     protected IComponent newComponent()
@@ -319,19 +322,19 @@
     protected void trainGetPage(IComponent component, IPage page)
     {
         component.getPage();
-        setReturnValue(component,page);
+        setReturnValue(component, page);
     }
 
     protected void trainGetExtendedId(IComponent component, String extendedId)
     {
         component.getExtendedId();
-        setReturnValue(component,extendedId);
+        setReturnValue(component, extendedId);
     }
 
     protected void trainGetLocation(Locatable locatable, Location location)
     {
         locatable.getLocation();
-        setReturnValue(locatable,location);
+        setReturnValue(locatable, location);
     }
 
     protected IBinding newBinding()
@@ -342,6 +345,44 @@
     protected void trainGetComponent(IComponent container, String componentId, IComponent containee)
     {
         container.getComponent(componentId);
-        setReturnValue(container,containee);
+        setReturnValue(container, containee);
+    }
+
+    protected IEngineService newEngineService()
+    {
+        return (IEngineService) newMock(IEngineService.class);
+    }
+
+    protected void trainGetLink(IEngineService service, IRequestCycle cycle, boolean post, Object parameter, ILink link)
+    {
+        service.getLink(cycle, post, parameter);
+        setReturnValue(service, link);
+    }
+
+    protected void trainGetURL(ILink link, String URL)
+    {
+        link.getURL();
+        setReturnValue(link, URL);
+    }
+
+    protected ILink newLink()
+    {
+        ILink link = (ILink) newMock(ILink.class);
+        return link;
+    }
+
+    protected void trainGetPageRenderSupport(IRequestCycle cycle, PageRenderSupport support)
+    {
+        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, support);
+    }
+
+    protected IComponentSpecification newSpec()
+    {
+        return (IComponentSpecification) newMock(IComponentSpecification.class);
+    }
+
+    protected Resource newResource()
+    {
+        return (Resource) newMock(Resource.class);
     }
 }

Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/MockDelegate.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/MockDelegate.java?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/MockDelegate.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/MockDelegate.java Sat Oct  1 05:14:07 2005
@@ -157,4 +157,10 @@
     {
     }
 
+    public void record(IFormComponent field, String message)
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
 }

Added: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/DescribeTest.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/DescribeTest.java?rev=292966&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/DescribeTest.java (added)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/DescribeTest.java Sat Oct  1 05:14:07 2005
@@ -0,0 +1,63 @@
+// Copyright 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.html;
+
+import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.describe.HTMLDescriber;
+
+/**
+ * Tests for {@link org.apache.tapestry.html.Describe}.
+ * 
+ * @author Howard M. Lewis Ship
+ */
+public class DescribeTest extends BaseComponentTestCase
+{
+    public void testRewinding()
+    {
+        IMarkupWriter writer = newWriter();
+        IRequestCycle cycle = newCycle(true);
+
+        replayControls();
+
+        Describe component = (Describe) newInstance(Describe.class);
+
+        component.renderComponent(writer, cycle);
+
+        verifyControls();
+    }
+
+    public void testRender()
+    {
+        IMarkupWriter writer = newWriter();
+        IRequestCycle cycle = newCycle(false);
+
+        Object object = new Object();
+
+        HTMLDescriber describer = (HTMLDescriber) newMock(HTMLDescriber.class);
+
+        describer.describeObject(object, writer);
+
+        replayControls();
+
+        Describe component = (Describe) newInstance(Describe.class, new Object[]
+        { "object", object, "describer", describer });
+
+        component.renderComponent(writer, cycle);
+
+        verifyControls();
+    }
+}

Added: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/FrameTest.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/FrameTest.java?rev=292966&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/FrameTest.java (added)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/FrameTest.java Sat Oct  1 05:14:07 2005
@@ -0,0 +1,89 @@
+// Copyright 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.html;
+
+import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.IBinding;
+import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.engine.IEngineService;
+import org.apache.tapestry.engine.ILink;
+import org.apache.tapestry.spec.ComponentSpecification;
+
+/**
+ * Tests for the {@link org.apache.tapestry.html.Frame} component.
+ * 
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public class FrameTest extends BaseComponentTestCase
+{
+
+    public void testRender()
+    {
+        IEngineService pageService = newEngineService();
+        ILink link = newLink();
+
+        IMarkupWriter writer = newWriter();
+        IRequestCycle cycle = newCycle();
+
+        trainGetLink(pageService, cycle, false, "FramePage", link);
+        trainGetURL(link, "<LinkURL>");
+
+        writer.beginEmpty("frame");
+        writer.attribute("src", "<LinkURL>");
+
+        writer.closeTag();
+
+        replayControls();
+
+        Frame frame = (Frame) newInstance(Frame.class, new Object[]
+        { "pageService", pageService, "targetPage", "FramePage" });
+
+        frame.renderComponent(writer, cycle);
+
+        verifyControls();
+    }
+
+    public void testRenderWithInformal()
+    {
+        IBinding binding = newBinding("informal");
+        IEngineService pageService = newEngineService();
+        ILink link = newLink();
+
+        IMarkupWriter writer = newWriter();
+        IRequestCycle cycle = newCycle();
+
+        trainGetLink(pageService, cycle, false, "FramePage", link);
+        trainGetURL(link, "<LinkURL>");
+
+        writer.beginEmpty("frame");
+        writer.attribute("src", "<LinkURL>");
+        writer.attribute("class", "informal");
+
+        writer.closeTag();
+
+        replayControls();
+
+        Frame frame = (Frame) newInstance(Frame.class, new Object[]
+        { "pageService", pageService, "targetPage", "FramePage", "specification",
+                new ComponentSpecification() });
+        frame.setBinding("class", binding);
+
+        frame.renderComponent(writer, cycle);
+
+        verifyControls();
+    }
+}

Added: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/ScriptTest.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/ScriptTest.java?rev=292966&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/ScriptTest.java (added)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/html/ScriptTest.java Sat Oct  1 05:14:07 2005
@@ -0,0 +1,242 @@
+// Copyright 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.html;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.hivemind.Resource;
+import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.IBinding;
+import org.apache.tapestry.IComponent;
+import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRender;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.IScript;
+import org.apache.tapestry.IScriptProcessor;
+import org.apache.tapestry.PageRenderSupport;
+import org.apache.tapestry.engine.IScriptSource;
+import org.apache.tapestry.spec.ComponentSpecification;
+import org.apache.tapestry.spec.IComponentSpecification;
+
+/**
+ * Tests for the {@link Script} component.
+ * 
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public class ScriptTest extends BaseComponentTestCase
+{
+    private static class MockScript implements IScript
+    {
+        Map _symbols;
+
+        public void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols)
+        {
+            _symbols = symbols;
+        }
+
+        public Resource getScriptResource()
+        {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+
+    /**
+     * No input symbols, no informal parameters.
+     */
+    public void testMinimalRender()
+    {
+        IScriptSource source = newScriptSource();
+        IScript script = newScript();
+
+        PageRenderSupport support = newPageRenderSupport();
+        IRequestCycle cycle = newCycle(false);
+        IMarkupWriter writer = newWriter();
+        Resource scriptLocation = newResource();
+        IRender body = newRender();
+
+        IComponent container = newComponent();
+
+        String scriptPath = "MyScript.script";
+
+        Script component = (Script) newInstance(Script.class, new Object[]
+        { "specification", new ComponentSpecification(), "container", container, "scriptSource",
+                source, "scriptPath", scriptPath });
+
+        trainGetPageRenderSupport(cycle, support);
+
+        trainGetScriptLocation(container, scriptPath, scriptLocation);
+
+        trainGetScript(source, scriptLocation, script);
+
+        script.execute(cycle, support, new HashMap());
+
+        body.render(writer, cycle);
+
+        replayControls();
+
+        component.addBody(body);
+
+        component.renderComponent(writer, cycle);
+
+        verifyControls();
+    }
+
+    public void testWithSymbolsMap()
+    {
+        IScriptSource source = newScriptSource();
+        MockScript script = new MockScript();
+
+        PageRenderSupport support = newPageRenderSupport();
+        IRequestCycle cycle = newCycle(false);
+        IMarkupWriter writer = newWriter();
+        Resource scriptLocation = newResource();
+        IRender body = newRender();
+
+        IComponent container = newComponent();
+
+        Map baseSymbols = new HashMap();
+        baseSymbols.put("fred", "barney");
+
+        String scriptPath = "MyScript.script";
+
+        Script component = (Script) newInstance(Script.class, new Object[]
+        { "specification", new ComponentSpecification(), "container", container, "scriptSource",
+                source, "scriptPath", scriptPath, "baseSymbols", baseSymbols });
+
+        trainGetPageRenderSupport(cycle, support);
+
+        trainGetScriptLocation(container, scriptPath, scriptLocation);
+
+        trainGetScript(source, scriptLocation, script);
+
+        body.render(writer, cycle);
+
+        replayControls();
+
+        component.addBody(body);
+
+        component.renderComponent(writer, cycle);
+
+        verifyControls();
+
+        assertEquals(baseSymbols, script._symbols);
+        assertSame(script._symbols, component.getSymbols());
+        assertNotSame(baseSymbols, script._symbols);
+    }
+
+    public void testWithSymbolsMapAndInformalParameters()
+    {
+        IScriptSource source = newScriptSource();
+        MockScript script = new MockScript();
+
+        PageRenderSupport support = newPageRenderSupport();
+        IRequestCycle cycle = newCycle(false);
+        IMarkupWriter writer = newWriter();
+        Resource scriptLocation = newResource();
+        IRender body = newRender();
+
+        IComponent container = newComponent();
+
+        Map baseSymbols = new HashMap();
+        baseSymbols.put("fred", "flintstone");
+        baseSymbols.put("flash", "gordon");
+
+        IBinding informal = newBinding("mercury");
+
+        String scriptPath = "MyScript.script";
+
+        Script component = (Script) newInstance(Script.class, new Object[]
+        { "specification", new ComponentSpecification(), "container", container, "scriptSource",
+                source, "scriptPath", scriptPath, "baseSymbols", baseSymbols });
+        component.setBinding("fred", informal);
+
+        trainGetPageRenderSupport(cycle, support);
+
+        trainGetScriptLocation(container, scriptPath, scriptLocation);
+
+        trainGetScript(source, scriptLocation, script);
+
+        body.render(writer, cycle);
+
+        replayControls();
+
+        component.addBody(body);
+
+        component.renderComponent(writer, cycle);
+
+        verifyControls();
+
+        Map expectedSymbols = new HashMap(baseSymbols);
+        expectedSymbols.put("fred", "mercury");
+
+        assertEquals(expectedSymbols, script._symbols);
+        assertSame(script._symbols, component.getSymbols());
+    }
+
+    public void testRewinding()
+    {
+        IMarkupWriter writer = newWriter();
+        IRequestCycle cycle = newCycle(true);
+        IRender body = newRender();
+
+        body.render(writer, cycle);
+
+        replayControls();
+
+        Script component = (Script) newInstance(Script.class);
+
+        component.addBody(body);
+
+        component.renderComponent(writer, cycle);
+
+        verifyControls();
+    }
+
+    protected IScript newScript()
+    {
+        return (IScript) newMock(IScript.class);
+    }
+
+    protected void trainGetScript(IScriptSource source, Resource scriptLocation, IScript script)
+    {
+        source.getScript(scriptLocation);
+        setReturnValue(source, script);
+    }
+
+    protected IScriptSource newScriptSource()
+    {
+        return (IScriptSource) newMock(IScriptSource.class);
+    }
+
+    protected void trainGetScriptLocation(IComponent component, String scriptPath,
+            Resource scriptLocation)
+    {
+        IComponentSpecification spec = newSpec();
+        Resource resource = newResource();
+
+        component.getSpecification();
+        setReturnValue(component, spec);
+
+        spec.getSpecificationLocation();
+        setReturnValue(spec, resource);
+
+        resource.getRelativeResource(scriptPath);
+        setReturnValue(resource, scriptLocation);
+    }
+}

Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java (from r292042, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/TestValidationDelegate.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/TestValidationDelegate.java&r1=292042&r2=292966&rev=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/TestValidationDelegate.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java Sat Oct  1 05:14:07 2005
@@ -27,7 +27,7 @@
  * @since 1.0.8
  */
 
-public class TestValidationDelegate extends BaseValidatorTestCase
+public class ValidationDelegateTest extends BaseValidatorTestCase
 {
     protected IFormComponent newField(String name, int count)
     {
@@ -370,5 +370,62 @@
         control.setReturnValue(clientId);
 
         return field;
+    }
+
+    /**
+     * Test {@link ValidationDelegate#record(IFormComponent, String)}.
+     * 
+     * @since 4.0
+     */
+    public void testSimpleRecord()
+    {
+        IFormComponent field = newField();
+
+        trainGetName(field, "myField");
+        trainGetName(field, "myField");
+
+        replayControls();
+
+        ValidationDelegate delegate = new ValidationDelegate();
+
+        delegate.record(field, "My Error Message");
+
+        List list = delegate.getFieldTracking();
+
+        assertEquals(1, list.size());
+
+        IFieldTracking ft = (IFieldTracking) list.get(0);
+
+        assertEquals(true, ft.isInError());
+        assertSame(field, ft.getComponent());
+        assertNull(ft.getConstraint());
+        assertEquals("My Error Message", ft.getErrorRenderer().toString());
+
+        verifyControls();
+    }
+
+    public void testSimpleRecordUnassociated()
+    {
+        ValidationDelegate delegate = new ValidationDelegate();
+
+        delegate.record(null, "My Error Message");
+
+        List list = delegate.getUnassociatedTrackings();
+
+        assertEquals(1, list.size());
+
+        IFieldTracking ft = (IFieldTracking) list.get(0);
+
+        assertEquals(true, ft.isInError());
+        assertNull(ft.getComponent());
+        assertNull(ft.getConstraint());
+        assertEquals("My Error Message", ft.getErrorRenderer().toString());
+
+    }
+
+    protected void trainGetName(IFormComponent field, String name)
+    {
+        field.getName();
+        setReturnValue(field, name);
     }
 }

Modified: jakarta/tapestry/trunk/status.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=292966&r1=292965&r2=292966&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Sat Oct  1 05:14:07 2005
@@ -59,6 +59,8 @@
       <action type="update" dev="HLS">Re-organize Tapestry project site navigation to be more consistent</action>
       <action type="update" dev="HLS">Rework build to create an seperate Tapestry examples distribution (which will be hosted from a non-ASF host)</action>
       <action type="fix" dev="DS" fixes-bug="TAPESTRY-492">Document MaskEdit component</action>
+      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-622">Add streamlined API for recording errors into a validation delegate</action>
+      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-667">Methods marked deprecated in IComponent need to also be deprecated in AbstractComponent to avoid compiler warnings (when subclassing)</action>
     </release>
     <release version="4.0-beta-8" date="Sep 24 2005">
       <action type="fix" dev="DS" fixes-bug="TAPESTRY-465">Document Foreach component</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org