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 2008/10/28 20:47:07 UTC

svn commit: r708649 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/ test/app1/ test/java/org/apache/tapestry5/integration/ test/java/org/apache/tapestry5/integration/app1/pages/ test/java/org/apache/t...

Author: hlship
Date: Tue Oct 28 12:47:04 2008
New Revision: 708649

URL: http://svn.apache.org/viewvc?rev=708649&view=rev
Log:
TAP5-105: Defining a component in the class that does not appear in the template should be an exception (not a logged, and ignored, warning)

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ComponentsNotInTemplateDemo.tml
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ComponentsNotInTemplateDemo.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Start.tml
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java?rev=708649&r1=708648&r2=708649&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java Tue Oct 28 12:47:04 2008
@@ -29,7 +29,6 @@
 import org.apache.tapestry5.runtime.RenderQueue;
 import org.apache.tapestry5.services.BindingSource;
 import org.apache.tapestry5.services.ComponentClassResolver;
-import org.slf4j.Logger;
 
 import java.util.List;
 import java.util.Locale;
@@ -441,8 +440,6 @@
 
         // Pre-allocate ids to avoid later name collisions.
 
-        Logger logger = loadingComponentModel.getLogger();
-
         // Don't have a case-insensitive Set, so we'll make due with a Map
         Map<String, Boolean> embeddedIds = CollectionFactory.newCaseInsensitiveMap();
 
@@ -458,7 +455,10 @@
         }
 
         if (!embeddedIds.isEmpty())
-            logger.error(ServicesMessages.embeddedComponentsNotInTemplate(embeddedIds.keySet(), componentClassName));
+            throw new TapestryException(
+                    ServicesMessages.embeddedComponentsNotInTemplate(embeddedIds.keySet(), componentClassName),
+                    loadingElement.getLocation(),
+                    null);
 
         addAttributesAsComponentBindings = false;
 

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ComponentsNotInTemplateDemo.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ComponentsNotInTemplateDemo.tml?rev=708649&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ComponentsNotInTemplateDemo.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ComponentsNotInTemplateDemo.tml Tue Oct 28 12:47:04 2008
@@ -0,0 +1,14 @@
+<html t:type="border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+    <h1>Components Not In Template Demo</h1>
+
+    <p>
+        This is a very common example where there's an @Component BeanEditForm on field form, and a t:form
+        here.
+    </p>
+
+    <!-- This will get an id of "form_0" -->
+    <t:form/>
+
+
+</html>
\ No newline at end of file

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Start.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Start.tml?rev=708649&r1=708648&r2=708649&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Start.tml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Start.tml Tue Oct 28 12:47:04 2008
@@ -85,6 +85,10 @@
             -- demo failure when attaching a page
         </li>
 
+        <li>
+            <a href="componentsNotInTemplateDemo">Components Not In Template Demo</a>
+            -- demo exception when a component is defined in the class but not present in the template
+        </li>
     </ul>
 
 </html>                      

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java?rev=708649&r1=708648&r2=708649&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java Tue Oct 28 12:47:04 2008
@@ -2358,4 +2358,15 @@
 
         assertTextPresent("Form components may not be placed inside other Form components.");
     }
+
+    /**
+     * TAP5-105
+     */
+    public void component_in_class_but_not_template_is_an_exception()
+    {
+        start("Components Not In Template Demo");
+
+        assertTextPresent(
+                "Embedded component(s) form are defined within component class org.apache.tapestry5.integration.app1.pages.ComponentsNotInTemplateDemo, but are not present in the component template.");
+    }
 }

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ComponentsNotInTemplateDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ComponentsNotInTemplateDemo.java?rev=708649&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ComponentsNotInTemplateDemo.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ComponentsNotInTemplateDemo.java Tue Oct 28 12:47:04 2008
@@ -0,0 +1,24 @@
+//  Copyright 2008 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.tapestry5.integration.app1.pages;
+
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.corelib.components.BeanEditForm;
+
+public class ComponentsNotInTemplateDemo
+{
+    @Component
+    private BeanEditForm form;
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java?rev=708649&r1=708648&r2=708649&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java Tue Oct 28 12:47:04 2008
@@ -19,14 +19,12 @@
 import org.apache.tapestry5.internal.parser.EndElementToken;
 import org.apache.tapestry5.internal.parser.StartComponentToken;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
-import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.EmbeddedComponentModel;
 import org.apache.tapestry5.services.ComponentClassResolver;
-import org.slf4j.Logger;
 import org.testng.annotations.Test;
 
 import java.util.Arrays;
@@ -51,8 +49,8 @@
         InternalComponentResources resources = mockInternalComponentResources();
         ComponentModel model = mockComponentModel();
         ComponentTemplate template = mockComponentTemplate();
-        Logger logger = mockLogger();
         ComponentClassResolver resolver = mockComponentClassResolver();
+        Location l = mockLocation();
 
         train_resolvePageNameToClassName(resolver, LOGICAL_PAGE_NAME, PAGE_CLASS_NAME);
 
@@ -67,23 +65,27 @@
 
         train_isMissing(template, false);
 
-        train_getLogger(model, logger);
-
         train_getEmbeddedIds(model, "foo", "bar", "baz");
 
         train_getComponentIds(template, "baz", "biff");
 
-        logger.error(ServicesMessages.embeddedComponentsNotInTemplate(Arrays.asList("foo", "bar"), PAGE_CLASS_NAME));
-
-        train_getTokens(template);
+        train_getLocation(rootElement, l);
 
         replay();
 
         PageLoader loader = new PageLoaderImpl(templateSource, elementFactory, null, null, resolver);
 
-        Page page = loader.loadPage(LOGICAL_PAGE_NAME, LOCALE);
-
-        assertSame(page.getLogicalName(), LOGICAL_PAGE_NAME);
+        try
+        {
+            loader.loadPage(LOGICAL_PAGE_NAME, LOCALE);
+            unreachable();
+        }
+        catch (TapestryException ex)
+        {
+            assertEquals(ex.getMessage(), ServicesMessages.embeddedComponentsNotInTemplate(Arrays.asList("foo", "bar"),
+                                                                                           PAGE_CLASS_NAME));
+            assertSame(ex.getLocation(), l);
+        }
 
         verify();
     }
@@ -97,7 +99,6 @@
         InternalComponentResources resources = mockInternalComponentResources();
         ComponentModel model = mockComponentModel();
         ComponentTemplate template = mockComponentTemplate();
-        Logger logger = mockLogger();
         EmbeddedComponentModel emodel = mockEmbeddedComponentModel();
         Location l = mockLocation();
         ComponentClassResolver resolver = mockComponentClassResolver();
@@ -114,8 +115,6 @@
 
         train_isMissing(template, false);
 
-        train_getLogger(model, logger);
-
         train_getEmbeddedIds(model, "foo");
 
         train_getComponentIds(template, "foo");