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/02/21 23:29:06 UTC

svn commit: r630030 [3/3] - in /tapestry/tapestry5/trunk: tapestry-core/src/main/java/org/apache/tapestry/ tapestry-core/src/main/java/org/apache/tapestry/annotations/ tapestry-core/src/main/java/org/apache/tapestry/internal/renderers/ tapestry-core/sr...

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java Thu Feb 21 14:28:54 2008
@@ -20,7 +20,7 @@
 import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.beaneditor.RelativePosition;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
-import org.apache.tapestry.internal.transform.ReadOnlyBean;
+import org.apache.tapestry.internal.transform.pages.ReadOnlyBean;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.services.BeanModelSource;
 import org.easymock.EasyMock;
@@ -380,7 +380,7 @@
 
         assertSame(propertyModel.getPropertyType(), String[].class);
 
-        String[] value = {"foo", "bar"};
+        String[] value = { "foo", "bar" };
 
         StringArrayBean bean = new StringArrayBean();
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java Thu Feb 21 14:28:54 2008
@@ -21,7 +21,9 @@
 import org.apache.tapestry.annotations.SetupRender;
 import org.apache.tapestry.internal.InternalComponentResources;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
-import org.apache.tapestry.internal.transform.*;
+import org.apache.tapestry.internal.transform.FieldRemoval;
+import org.apache.tapestry.internal.transform.InheritedAnnotation;
+import org.apache.tapestry.internal.transform.TestPackageAwareLoader;
 import org.apache.tapestry.internal.transform.pages.*;
 import org.apache.tapestry.ioc.internal.services.ClassFactoryClassPool;
 import org.apache.tapestry.ioc.internal.services.ClassFactoryImpl;
@@ -570,7 +572,7 @@
 
         Class[] interfaces = transformed.getInterfaces();
 
-        assertEquals(interfaces, new Class[]{Component.class, FooInterface.class, GetterMethodsInterface.class});
+        assertEquals(interfaces, new Class[] { Component.class, FooInterface.class, GetterMethodsInterface.class });
 
         Object target = ct.createInstantiator().newInstance(resources);
 
@@ -624,7 +626,7 @@
             // The PropertyAccess layer adds a wrapper exception around the real one.
 
             assertEquals(ex.getCause().getMessage(),
-                         "Field org.apache.tapestry.internal.transform.ReadOnlyBean._value is read-only.");
+                         "Field org.apache.tapestry.internal.transform.pages.ReadOnlyBean._value is read-only.");
         }
 
         verify();
@@ -705,7 +707,7 @@
             // The PropertyAccess layer adds a wrapper exception around the real one.
 
             assertEquals(ex.getCause().getMessage(),
-                         "Field org.apache.tapestry.internal.transform.ReadOnlyBean._value is read-only.");
+                         "Field org.apache.tapestry.internal.transform.pages.ReadOnlyBean._value is read-only.");
         }
 
         verify();
@@ -789,7 +791,7 @@
 
         TransformMethodSignature writeMethodSignature = new TransformMethodSignature(Modifier.PRIVATE, "void",
                                                                                      writeMethodName,
-                                                                                     new String[]{STRING_CLASS_NAME},
+                                                                                     new String[] { STRING_CLASS_NAME },
                                                                                      null);
         ct.addMethod(writeMethodSignature, String.format("throw new RuntimeException(\"write %s\");", baseName));
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java Thu Feb 21 14:28:54 2008
@@ -96,6 +96,7 @@
         LinkFactoryListener listener = mockLinkFactoryListener();
         ComponentInvocationMap map = mockComponentInvocationMap();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
 
         train_getLogicalName(page, PAGE_LOGICAL_NAME);
         train_getContextPath(request, "/barney");
@@ -106,15 +107,72 @@
 
         train_triggerPassivateEventForPageLink(rootElement, listener, holder);
 
+        train_getBaseURL(securityManager, page, null);
+
+
         train_encodeRedirectURL(response, "/barney/" + PAGE_LOGICAL_NAME.toLowerCase() + "/foo/bar", ENCODED);
 
         // This needs to be refactored a bit to be more testable.
 
         map.store(isA(Link.class), isA(ComponentInvocationImpl.class));
 
+
         replay();
 
-        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null, _contextValueEncoder);
+        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null, _contextValueEncoder,
+                                                  securityManager);
+
+        factory.addListener(listener);
+
+        Link link = factory.createPageLink(page, false);
+
+        assertEquals(link.toRedirectURI(), ENCODED);
+
+        // Make sure the link was passed to the LinkFactoryListener
+
+        assertSame(link, holder.get());
+
+        verify();
+    }
+
+    @Test
+    public void secure_page_link()
+    {
+        Request request = mockRequest();
+        Response response = mockResponse();
+        Page page = mockPage();
+        ComponentPageElement rootElement = mockComponentPageElement();
+        LinkFactoryListener listener = mockLinkFactoryListener();
+        ComponentInvocationMap map = mockComponentInvocationMap();
+        RequestPathOptimizer optimizer = mockRequestPathOptimizer();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
+
+        train_getLogicalName(page, PAGE_LOGICAL_NAME);
+        train_getContextPath(request, "/barney");
+
+        train_getRootElement(page, rootElement);
+
+        final Holder<Link> holder = new Holder<Link>();
+
+        train_triggerPassivateEventForPageLink(rootElement, listener, holder);
+
+
+        train_getBaseURL(securityManager, page, "https://example.org");
+
+
+        train_encodeRedirectURL(response,
+                                "https://example.org/barney/" + PAGE_LOGICAL_NAME.toLowerCase() + "/foo/bar",
+                                ENCODED);
+
+        // This needs to be refactored a bit to be more testable.
+
+        map.store(isA(Link.class), isA(ComponentInvocationImpl.class));
+
+        replay();
+
+        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null,
+                                                  _contextValueEncoder,
+                                                  securityManager);
 
         factory.addListener(listener);
 
@@ -139,6 +197,7 @@
         LinkFactoryListener listener = mockLinkFactoryListener();
         ComponentInvocationMap map = mockComponentInvocationMap();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
 
         train_getLogicalName(page, PAGE_LOGICAL_NAME);
         train_getContextPath(request, "/barney");
@@ -150,6 +209,9 @@
         listener.createdPageLink(isA(Link.class));
         getMocksControl().andAnswer(createdPageLinkAnswer);
 
+        train_getBaseURL(securityManager, page, null);
+
+
         train_encodeRedirectURL(response, "/barney/" + PAGE_LOGICAL_NAME.toLowerCase() + "/biff/bazz", ENCODED);
 
         // This needs to be refactored a bit to be more testable.
@@ -158,7 +220,8 @@
 
         replay();
 
-        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null, _contextValueEncoder);
+        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null, _contextValueEncoder,
+                                                  securityManager);
         factory.addListener(listener);
 
         Link link = factory.createPageLink(page, false, "biff", "bazz");
@@ -182,6 +245,7 @@
         LinkFactoryListener listener = mockLinkFactoryListener();
         ComponentInvocationMap map = mockComponentInvocationMap();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
 
         train_getLogicalName(page, PAGE_LOGICAL_NAME);
         train_getContextPath(request, "/barney");
@@ -193,6 +257,8 @@
         listener.createdPageLink(isA(Link.class));
         getMocksControl().andAnswer(createdPageLinkAnswer);
 
+        train_getBaseURL(securityManager, page, null);
+
         train_encodeRedirectURL(response, "/barney/" + PAGE_LOGICAL_NAME.toLowerCase(), ENCODED);
 
         // This needs to be refactored a bit to be more testable.
@@ -201,7 +267,8 @@
 
         replay();
 
-        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null, _contextValueEncoder);
+        LinkFactory factory = new LinkFactoryImpl(request, response, map, null, optimizer, null, _contextValueEncoder,
+                                                  securityManager);
         factory.addListener(listener);
 
         Link link = factory.createPageLink(page, true);
@@ -226,6 +293,7 @@
         ComponentInvocationMap map = mockComponentInvocationMap();
         RequestPageCache cache = mockRequestPageCache();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
 
         train_get(cache, PAGE_LOGICAL_NAME, page);
 
@@ -239,6 +307,8 @@
 
         train_triggerPassivateEventForPageLink(rootElement, listener, holder);
 
+        train_getBaseURL(securityManager, page, null);
+
         train_encodeRedirectURL(response, "/barney/" + PAGE_LOGICAL_NAME.toLowerCase() + "/foo/bar", ENCODED);
 
         // This needs to be refactored a bit to be more testable.
@@ -247,7 +317,8 @@
 
         replay();
 
-        LinkFactory factory = new LinkFactoryImpl(request, response, map, cache, optimizer, null, _contextValueEncoder);
+        LinkFactory factory = new LinkFactoryImpl(request, response, map, cache, optimizer, null, _contextValueEncoder,
+                                                  securityManager);
         factory.addListener(listener);
 
         Link link = factory.createPageLink(PAGE_LOGICAL_NAME, false);
@@ -322,7 +393,7 @@
                 ComponentEventCallback handler = (ComponentEventCallback) EasyMock
                         .getCurrentArguments()[2];
 
-                handler.handleResult(new Object[]{"foo", "bar"});
+                handler.handleResult(new Object[] { "foo", "bar" });
 
                 return true;
             }
@@ -341,6 +412,7 @@
         RequestPageCache cache = mockRequestPageCache();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
         PageRenderQueue queue = mockPageRenderQueue();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
 
         String optimizedPath = "/optimized/path";
 
@@ -349,6 +421,8 @@
         train_getLogicalName(page, "mypage");
         train_getContextPath(request, "");
 
+        train_getBaseURL(securityManager, page, null);
+
         train_optimizePath(optimizer, "/mypage:myaction/1.2.3/4.5.6?t:ac=foo/bar", optimizedPath);
 
         train_getRootElement(page, rootElement);
@@ -365,7 +439,7 @@
         replay();
 
         LinkFactory factory = new LinkFactoryImpl(request, response, map, cache, optimizer, queue,
-                                                  _contextValueEncoder);
+                                                  _contextValueEncoder, securityManager);
         factory.addListener(listener);
 
         Link link = factory.createActionLink(page, null, "myaction", false, "1.2.3", "4.5.6");
@@ -376,6 +450,9 @@
         verify();
     }
 
+    /**
+     * For good measure, we're going to also test a security change.
+     */
     @Test
     public void action_for_non_active_page()
     {
@@ -389,15 +466,13 @@
         RequestPageCache cache = mockRequestPageCache();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
         PageRenderQueue queue = mockPageRenderQueue();
-
-        String optimizedPath = "/optimized/path";
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
 
         final Holder<Link> holder = new Holder<Link>();
 
         train_getLogicalName(containingPage, "MyPage");
         train_getContextPath(request, "");
 
-        train_optimizePath(optimizer, "/mypage:myaction?t:ac=foo/bar&t:ap=activepage", optimizedPath);
 
         train_getRootElement(activePage, rootElement);
         train_triggerPassivateEventForActionLink(rootElement, listener, holder);
@@ -410,12 +485,14 @@
 
         map.store(isA(Link.class), isA(ComponentInvocation.class));
 
-        train_encodeURL(response, "/optimized/path", ENCODED);
+        train_getBaseURL(securityManager, activePage, "http://example.org");
+
+        train_encodeURL(response, "http://example.org/mypage:myaction?t:ac=foo/bar&t:ap=activepage", ENCODED);
 
         replay();
 
         LinkFactory factory = new LinkFactoryImpl(request, response, map, cache, optimizer, queue,
-                                                  _contextValueEncoder);
+                                                  _contextValueEncoder, securityManager);
         factory.addListener(listener);
 
         Link link = factory.createActionLink(containingPage, null, "myaction", false);
@@ -440,6 +517,8 @@
         RequestPageCache cache = mockRequestPageCache();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
         PageRenderQueue queue = mockPageRenderQueue();
+        RequestSecurityManager securityManager = mockRequestSecurityManager();
+
 
         String optimizedPath = "/optimized/path";
 
@@ -461,12 +540,14 @@
 
         map.store(isA(Link.class), isA(ComponentInvocationImpl.class));
 
+        train_getBaseURL(securityManager, page, null);
+
         train_encodeURL(response, optimizedPath, ENCODED);
 
         replay();
 
         LinkFactory factory = new LinkFactoryImpl(request, response, map, cache, optimizer, queue,
-                                                  _contextValueEncoder);
+                                                  _contextValueEncoder, securityManager);
         factory.addListener(listener);
 
         Link link = factory.createActionLink(page, nestedId, eventName, false, context);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkImplTest.java Thu Feb 21 14:28:54 2008
@@ -229,7 +229,7 @@
         replay();
 
 
-        Link link = new LinkImpl(response, optimizer, "/ctx",
+        Link link = new LinkImpl(response, optimizer, null, "/ctx",
                                  new ComponentInvocationImpl(new OpaqueConstantTarget("foo"), new String[0], null),
                                  false);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 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.
@@ -17,8 +17,11 @@
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+import org.apache.tapestry.ioc.services.SymbolSource;
+import org.apache.tapestry.ioc.services.TypeCoercer;
 import org.apache.tapestry.model.ComponentModel;
 import org.apache.tapestry.services.MetaDataLocator;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import java.util.Collections;
@@ -26,11 +29,20 @@
 
 public class MetaDataLocatorImplTest extends InternalBaseTestCase
 {
+    private TypeCoercer _typeCoercer;
+
+    @BeforeClass
+    public void setup()
+    {
+        _typeCoercer = getService(TypeCoercer.class);
+    }
+
     @Test
     public void found_in_component()
     {
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
 
         String key = "foo.bar";
         String value = "zaphod";
@@ -39,14 +51,15 @@
         train_getCompleteId(resources, completeId);
         train_getComponentModel(resources, model);
         train_getMeta(model, key, value);
+        train_expandSymbols(symbolSource, value, value);
 
         replay();
 
         Map<String, String> configuration = Collections.emptyMap();
 
-        MetaDataLocator locator = new MetaDataLocatorImpl(configuration);
+        MetaDataLocator locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
 
@@ -56,7 +69,7 @@
 
         replay();
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
     }
@@ -68,6 +81,7 @@
         ComponentResources containerResources = mockComponentResources();
         ComponentModel model = mockComponentModel();
         ComponentModel containerModel = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
 
         String key = "foo.bar";
         String value = "zaphod";
@@ -79,14 +93,15 @@
         train_getContainerResources(resources, containerResources);
         train_getComponentModel(containerResources, containerModel);
         train_getMeta(containerModel, key, value);
+        train_expandSymbols(symbolSource, value, value);
 
         replay();
 
         Map<String, String> configuration = Collections.emptyMap();
 
-        MetaDataLocator locator = new MetaDataLocatorImpl(configuration);
+        MetaDataLocator locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
     }
@@ -96,6 +111,7 @@
     {
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
 
         String key = "foo.bar";
         String value = "zaphod";
@@ -109,14 +125,16 @@
 
         train_getPageName(resources, logicalPageName);
 
+        train_expandSymbols(symbolSource, value, value);
+
         replay();
 
         Map<String, String> configuration = newMap();
         configuration.put(key, value);
 
-        MetaDataLocator locator = new MetaDataLocatorImpl(configuration);
+        MetaDataLocator locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
 
@@ -126,7 +144,7 @@
 
         replay();
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
     }
@@ -136,6 +154,7 @@
     {
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
 
         String key = "foo.bar";
         String value = "zaphod";
@@ -148,14 +167,16 @@
 
         train_getPageName(resources, "foo/Bar");
 
+        train_expandSymbols(symbolSource, value, value);
+
         replay();
 
         Map<String, String> configuration = newMap();
         configuration.put(key.toUpperCase(), value);
 
-        MetaDataLocator locator = new MetaDataLocatorImpl(configuration);
+        MetaDataLocator locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
 
@@ -165,7 +186,7 @@
 
         replay();
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
     }
@@ -175,6 +196,7 @@
     {
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
 
         String key = "foo.bar";
         String value = "zaphod";
@@ -187,15 +209,17 @@
 
         train_getPageName(resources, "foo/Bar");
 
+        train_expandSymbols(symbolSource, value, value);
+
         replay();
 
         Map<String, String> configuration = newMap();
         configuration.put(key, "xxx");
         configuration.put("foo:" + key, value);
 
-        MetaDataLocator locator = new MetaDataLocatorImpl(configuration);
+        MetaDataLocator locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
 
@@ -205,7 +229,7 @@
 
         replay();
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
     }
@@ -215,6 +239,7 @@
     {
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
 
         String key = "foo.bar";
         String value = "zaphod";
@@ -224,13 +249,15 @@
         train_getComponentModel(resources, model);
         train_getMeta(model, key, value);
 
+        train_expandSymbols(symbolSource, value, value);
+
         replay();
 
         Map<String, String> configuration = Collections.emptyMap();
 
-        MetaDataLocatorImpl locator = new MetaDataLocatorImpl(configuration);
+        MetaDataLocatorImpl locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
 
         verify();
 
@@ -240,11 +267,44 @@
         train_getComponentModel(resources, model);
         train_getMeta(model, key, value);
 
+        train_expandSymbols(symbolSource, value, value);
+
         replay();
 
         locator.objectWasInvalidated();
 
-        assertSame(locator.findMeta(key, resources), value);
+        assertSame(locator.findMeta(key, resources, String.class), value);
+
+        verify();
+    }
+
+    /**
+     * Makes sense to test together to ensure that the expanded value is what's fed to the type coercer.
+     */
+    @Test
+    public void train_symbols_expanded_and_types_coerced()
+    {
+        ComponentResources resources = mockComponentResources();
+        ComponentModel model = mockComponentModel();
+        SymbolSource symbolSource = mockSymbolSource();
+
+        String key = "foo.bar";
+        String value = "${zaphod}";
+        String expandedValue = "99";
+        String completeId = "foo.Bar:baz";
+
+        train_getCompleteId(resources, completeId);
+        train_getComponentModel(resources, model);
+        train_getMeta(model, key, value);
+        train_expandSymbols(symbolSource, value, expandedValue);
+
+        replay();
+
+        Map<String, String> configuration = Collections.emptyMap();
+
+        MetaDataLocator locator = new MetaDataLocatorImpl(symbolSource, _typeCoercer, configuration);
+
+        assertEquals(locator.findMeta(key, resources, Integer.class), new Integer(99));
 
         verify();
     }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PersistentFieldManagerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PersistentFieldManagerImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PersistentFieldManagerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PersistentFieldManagerImplTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -140,7 +140,7 @@
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
         PersistentFieldStrategy strat = newPersistentFieldStrategy();
-        MetaDataLocator locator = newMetaDataLocator();
+        MetaDataLocator locator = mockMetaDataLocator();
 
         Object value = new Object();
 
@@ -151,7 +151,7 @@
 
         train_getFieldPersistenceStrategy(model, fieldName, "");
 
-        train_findMeta(locator, PersistentFieldManagerImpl.META_KEY, resources, strategyName);
+        train_findMeta(locator, PersistentFieldManagerImpl.META_KEY, resources, String.class, strategyName);
 
         train_getNestedId(resources, nestedId);
 
@@ -175,7 +175,7 @@
 
         ComponentResources resources = mockComponentResources();
         ComponentModel model = mockComponentModel();
-        MetaDataLocator locator = newMetaDataLocator();
+        MetaDataLocator locator = mockMetaDataLocator();
 
         PersistentFieldStrategy strat = newPersistentFieldStrategy();
         Object value = new Object();
@@ -190,7 +190,7 @@
         train_findMeta(
                 locator,
                 PersistentFieldManagerImpl.META_KEY,
-                resources,
+                resources, String.class,
                 PersistentFieldManagerImpl.DEFAULT_STRATEGY);
 
         train_getNestedId(resources, nestedId);
@@ -206,18 +206,7 @@
         verify();
     }
 
-    protected void train_findMeta(MetaDataLocator locator, String key,
-                                  ComponentResources resources, String value)
-    {
-        expect(locator.findMeta(key, resources)).andReturn(value).atLeastOnce();
-    }
-
-    protected MetaDataLocator newMetaDataLocator()
-    {
-        return newMock(MetaDataLocator.class);
-    }
-
-    private PersistentFieldStrategy newPersistentFieldStrategy()
+    protected final PersistentFieldStrategy newPersistentFieldStrategy()
     {
         return newMock(PersistentFieldStrategy.class);
     }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 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.
@@ -44,6 +44,7 @@
                 locator,
                 TapestryConstants.RESPONSE_CONTENT_TYPE,
                 resources,
+                String.class,
                 "text/html;charset=zebra");
 
         request.setEncoding("zebra");
@@ -74,9 +75,9 @@
         train_getRootElement(page, element);
         train_getComponentResources(element, resources);
 
-        train_findMeta(locator, TapestryConstants.RESPONSE_CONTENT_TYPE, resources, "text/html");
+        train_findMeta(locator, TapestryConstants.RESPONSE_CONTENT_TYPE, resources, String.class, "text/html");
 
-        train_findMeta(locator, TapestryConstants.RESPONSE_ENCODING, resources, encoding);
+        train_findMeta(locator, TapestryConstants.RESPONSE_ENCODING, resources, String.class, encoding);
 
         request.setEncoding(encoding);
 
@@ -90,15 +91,5 @@
         verify();
     }
 
-    protected final void train_findMeta(MetaDataLocator locator, String metaDataKey,
-                                        InternalComponentResources resources, String metaDataValue)
-    {
-        expect(locator.findMeta(metaDataKey, resources)).andReturn(metaDataValue);
-    }
-
-    protected final MetaDataLocator mockMetaDataLocator()
-    {
-        return newMock(MetaDataLocator.class);
-    }
 
 }

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestSecurityManagerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestSecurityManagerImplTest.java?rev=630030&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestSecurityManagerImplTest.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestSecurityManagerImplTest.java Thu Feb 21 14:28:54 2008
@@ -0,0 +1,165 @@
+// 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.tapestry.internal.services;
+
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.Link;
+import org.apache.tapestry.TapestryConstants;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.runtime.Component;
+import org.apache.tapestry.services.BaseURLSource;
+import org.apache.tapestry.services.MetaDataLocator;
+import org.apache.tapestry.services.Request;
+import org.apache.tapestry.services.Response;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+public class RequestSecurityManagerImplTest extends InternalBaseTestCase
+{
+    private static final String PAGE_NAME = "Whatever";
+
+    @Test
+    public void check_request_is_secure() throws Exception
+    {
+        Request request = mockRequest();
+        Response response = mockResponse();
+        LinkFactory linkFactory = mockLinkFactory();
+        MetaDataLocator locator = mockMetaDataLocator();
+        BaseURLSource source = mockBaseURLSource();
+        RequestPageCache cache = mockRequestPageCache();
+
+        train_isSecure(request, true);
+
+        replay();
+
+        RequestSecurityManager manager
+                = new RequestSecurityManagerImpl(request, response, linkFactory, locator, source, cache);
+
+        assertFalse(manager.checkForInsecureRequest(PAGE_NAME));
+
+        verify();
+    }
+
+    @Test
+    public void check_page_not_secure() throws Exception
+    {
+        Request request = mockRequest();
+        Response response = mockResponse();
+        LinkFactory linkFactory = mockLinkFactory();
+        MetaDataLocator locator = mockMetaDataLocator();
+        BaseURLSource source = mockBaseURLSource();
+        RequestPageCache cache = mockRequestPageCache();
+        Page page = mockPage();
+
+        train_isSecure(request, false);
+
+        train_get(cache, PAGE_NAME, page);
+
+        train_isSecure(locator, page, false);
+
+        replay();
+
+        RequestSecurityManager manager
+                = new RequestSecurityManagerImpl(request, response, linkFactory, locator, source, cache);
+
+        assertFalse(manager.checkForInsecureRequest(PAGE_NAME));
+
+        verify();
+    }
+
+    @Test
+    public void check_redirect_needed() throws Exception
+    {
+        Request request = mockRequest();
+        Response response = mockResponse();
+        LinkFactory linkFactory = mockLinkFactory();
+        MetaDataLocator locator = mockMetaDataLocator();
+        BaseURLSource source = mockBaseURLSource();
+        Page page = mockPage();
+        Link link = mockLink();
+        RequestPageCache cache = mockRequestPageCache();
+
+        train_isSecure(request, false);
+
+        train_get(cache, PAGE_NAME, page);
+
+        train_isSecure(locator, page, true);
+
+        train_createPageLink(linkFactory, page, link);
+
+        response.sendRedirect(link);
+
+        replay();
+
+        RequestSecurityManager manager
+                = new RequestSecurityManagerImpl(request, response, linkFactory, locator, source, cache);
+
+        assertTrue(manager.checkForInsecureRequest(PAGE_NAME));
+
+        verify();
+    }
+
+    @DataProvider(name = "base_URL_data")
+    public Object[][] base_URL_data()
+    {
+        return new Object[][] {
+                { true, true, null },
+                { false, false, null },
+                { true, false, "http://example.org" },
+                { false, true, "https://example.org" }
+        };
+    }
+
+    @Test(dataProvider = "base_URL_data")
+    public void get_base_URL(boolean secureRequest, boolean securePage, String expectedURL)
+    {
+        Request request = mockRequest();
+        Response response = mockResponse();
+        LinkFactory linkFactory = mockLinkFactory();
+        MetaDataLocator locator = mockMetaDataLocator();
+        BaseURLSource source = mockBaseURLSource();
+        Page page = mockPage();
+
+        train_isSecure(request, secureRequest);
+        train_isSecure(locator, page, securePage);
+
+        if (expectedURL != null)
+            train_getBaseURL(source, securePage, expectedURL);
+
+        replay();
+
+        RequestSecurityManager manager
+                = new RequestSecurityManagerImpl(request, response, linkFactory, locator, source, null);
+
+        assertEquals(manager.getBaseURL(page), expectedURL);
+
+        verify();
+    }
+
+
+    private void train_isSecure(MetaDataLocator locator, Page page, boolean secure)
+    {
+        Component component = mockComponent();
+        ComponentResources resources = mockInternalComponentResources();
+
+        train_getRootComponent(page, component);
+        train_getComponentResources(component, resources);
+
+        train_findMeta(locator, TapestryConstants.SECURE_PAGE, resources, Boolean.class, secure);
+    }
+
+
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SessionApplicationStatePersistenceStrategyTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SessionApplicationStatePersistenceStrategyTest.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SessionApplicationStatePersistenceStrategyTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SessionApplicationStatePersistenceStrategyTest.java Thu Feb 21 14:28:54 2008
@@ -15,7 +15,7 @@
 package org.apache.tapestry.internal.services;
 
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
-import org.apache.tapestry.internal.transform.ReadOnlyBean;
+import org.apache.tapestry.internal.transform.pages.ReadOnlyBean;
 import org.apache.tapestry.services.ApplicationStateCreator;
 import org.apache.tapestry.services.ApplicationStatePersistenceStrategy;
 import org.apache.tapestry.services.Request;

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java Thu Feb 21 14:28:54 2008
@@ -629,4 +629,14 @@
     {
         expect(access.getAdapter(object)).andReturn(classPropertyAdapter);
     }
+
+    protected final RequestSecurityManager mockRequestSecurityManager()
+    {
+        return newMock(RequestSecurityManager.class);
+    }
+
+    protected final void train_getBaseURL(RequestSecurityManager securityManager, Page page, String baseURL)
+    {
+        expect(securityManager.getBaseURL(page)).andReturn(baseURL).atLeastOnce();
+    }
 }

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ApplicationStateWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ApplicationStateWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ApplicationStateWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ApplicationStateWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ApplicationStateWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ApplicationStateWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ApplicationStateWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import javassist.CtClass;
 import javassist.Loader;
@@ -20,9 +20,10 @@
 import javassist.NotFoundException;
 import org.apache.tapestry.annotations.ApplicationState;
 import org.apache.tapestry.internal.InternalComponentResources;
+import org.apache.tapestry.internal.services.*;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
-import org.apache.tapestry.internal.transform.MaybeStateHolder;
-import org.apache.tapestry.internal.transform.StateHolder;
+import org.apache.tapestry.internal.transform.pages.MaybeStateHolder;
+import org.apache.tapestry.internal.transform.pages.StateHolder;
 import org.apache.tapestry.ioc.internal.services.ClassFactoryClassPool;
 import org.apache.tapestry.ioc.internal.services.ClassFactoryImpl;
 import org.apache.tapestry.ioc.internal.services.PropertyAccessImpl;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ComponentLifecycleMethodWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentLifecycleMethodWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ComponentLifecycleMethodWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ComponentLifecycleMethodWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentLifecycleMethodWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentLifecycleMethodWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ComponentLifecycleMethodWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.annotations.SetupRender;
 import org.apache.tapestry.model.MutableComponentModel;
@@ -24,9 +24,8 @@
 import org.testng.annotations.Test;
 
 /**
- * Of course, we're committing the cardinal sin of testing the code that's generated, rather than
- * the *behavior* of the generated code. Fortunately, we back all this up with lots and lots of
- * integration testing.
+ * Of course, we're committing the cardinal sin of testing the code that's generated, rather than the *behavior* of the
+ * generated code. Fortunately, we back all this up with lots and lots of integration testing.
  */
 public class ComponentLifecycleMethodWorkerTest extends TapestryTestCase
 {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ContentTypeWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ContentTypeWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ContentTypeWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ContentTypeWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ContentTypeWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ContentTypeWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ContentTypeWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.TapestryConstants;
 import org.apache.tapestry.annotations.ContentType;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectComponentWorkerTest.java (from r628968, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InjectComponentWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectComponentWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectComponentWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InjectComponentWorkerTest.java&r1=628968&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InjectComponentWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectComponentWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.annotations.InjectComponent;
 import org.apache.tapestry.corelib.components.Grid;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InjectWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InjectWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InjectWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InjectWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.ioc.ObjectLocator;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InvokePostRenderCleanupOnResourcesWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InvokePostRenderCleanupOnResourcesWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InvokePostRenderCleanupOnResourcesWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InvokePostRenderCleanupOnResourcesWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InvokePostRenderCleanupOnResourcesWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InvokePostRenderCleanupOnResourcesWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/InvokePostRenderCleanupOnResourcesWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.model.MutableComponentModel;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MetaWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MetaWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MetaWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MetaWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.annotations.Meta;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
@@ -47,7 +47,7 @@
         train_getAnnotation(ct, Meta.class, annotation);
 
         expect(annotation.value()).andReturn(new String[]
-                {"foo=bar", "baz=biff"});
+                { "foo=bar", "baz=biff" });
 
         model.setMeta("foo", "bar");
         model.setMeta("baz", "biff");

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinAfterWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MixinAfterWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinAfterWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinAfterWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MixinAfterWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MixinAfterWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinAfterWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.annotations.MixinAfter;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MixinWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MixinWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MixinWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MixinWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.annotations.Mixin;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ParameterWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ParameterWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ParameterWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ParameterWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ParameterWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ParameterWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ParameterWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import javassist.CtClass;
 import javassist.Loader;
@@ -20,6 +20,9 @@
 import org.apache.tapestry.Binding;
 import org.apache.tapestry.TapestryConstants;
 import org.apache.tapestry.internal.InternalComponentResources;
+import org.apache.tapestry.internal.services.Instantiator;
+import org.apache.tapestry.internal.services.InternalClassTransformation;
+import org.apache.tapestry.internal.services.InternalClassTransformationImpl;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.internal.transform.components.DefaultParameterBindingMethodComponent;
 import org.apache.tapestry.internal.transform.components.DefaultParameterComponent;
@@ -37,7 +40,7 @@
 import org.testng.annotations.Test;
 
 /**
- * There's no point in trying to unit test the code generated by {@link org.apache.tapestry.internal.services.ParameterWorker}.
+ * There's no point in trying to unit test the code generated by {@link org.apache.tapestry.internal.transform.ParameterWorker}.
  * Instead, we excercize ParameterWorker, and test that the generated code works correctly in a number of scenarios.
  */
 public class ParameterWorkerTest extends InternalBaseTestCase
@@ -47,7 +50,7 @@
     private PropertyAccess _access = new PropertyAccessImpl();
 
     /**
-     * Accessed by DefaultParameerBindingMethodComponent.
+     * Accessed by DefaultParameterBindingMethodComponent.
      */
     public static Binding _binding;
 

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ResponseEncodingWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ResponseEncodingWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ResponseEncodingWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ResponseEncodingWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ResponseEncodingWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ResponseEncodingWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ResponseEncodingWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.TapestryConstants;
 import org.apache.tapestry.annotations.ResponseEncoding;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/RetainWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RetainWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/RetainWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/RetainWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RetainWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RetainWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/RetainWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,24 +1,24 @@
-// Copyright 2006, 2007 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.internal.services;
+// Copyright 2006, 2007, 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.
 
-import org.apache.tapestry.annotations.Retain;
-import org.apache.tapestry.internal.test.InternalBaseTestCase;
-import org.apache.tapestry.model.MutableComponentModel;
-import org.apache.tapestry.services.ClassTransformation;
-import org.testng.annotations.Test;
+package org.apache.tapestry.internal.transform;
+
+import org.apache.tapestry.annotations.Retain;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.model.MutableComponentModel;
+import org.apache.tapestry.services.ClassTransformation;
+import org.testng.annotations.Test;
 
 public class RetainWorkerTest extends InternalBaseTestCase
 {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/SupportsInformalParametersWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/SupportsInformalParametersWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/SupportsInformalParametersWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/SupportsInformalParametersWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.annotations.SupportsInformalParameters;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/TestPackageAwareLoader.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TestPackageAwareLoader.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/TestPackageAwareLoader.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/TestPackageAwareLoader.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TestPackageAwareLoader.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TestPackageAwareLoader.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/TestPackageAwareLoader.java Thu Feb 21 14:28:54 2008
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import javassist.ClassPool;
 import javassist.Loader;
 
-class TestPackageAwareLoader extends Loader
+public class TestPackageAwareLoader extends Loader
 {
     public TestPackageAwareLoader(ClassLoader parent, ClassPool cp)
     {
@@ -25,9 +25,12 @@
     }
 
     @Override
-    protected Class findClass(String className) throws ClassNotFoundException
+    public Class findClass(String className) throws ClassNotFoundException
     {
-        if (className.startsWith("org.apache.tapestry.internal.transform.")) return super.findClass(className);
+        int lastdotx = className.lastIndexOf('.');
+        String packageName = className.substring(0, lastdotx);
+
+        if (packageName.startsWith("org.apache.tapestry.internal.transform.")) return super.findClass(className);
 
         // Returning null forces delegation to the parent class loader.
 

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/UnclaimedFieldWorkerTest.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/UnclaimedFieldWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/UnclaimedFieldWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/UnclaimedFieldWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/UnclaimedFieldWorkerTest.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/UnclaimedFieldWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/UnclaimedFieldWorkerTest.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
+package org.apache.tapestry.internal.transform;
 
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.model.MutableComponentModel;

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterBindingMethodComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterBindingMethodComponent.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterBindingMethodComponent.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterBindingMethodComponent.java Thu Feb 21 14:28:54 2008
@@ -16,7 +16,7 @@
 
 import org.apache.tapestry.Binding;
 import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.internal.services.ParameterWorkerTest;
+import org.apache.tapestry.internal.transform.ParameterWorkerTest;
 
 public class DefaultParameterBindingMethodComponent
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterComponent.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterComponent.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/DefaultParameterComponent.java Thu Feb 21 14:28:54 2008
@@ -17,7 +17,7 @@
 import org.apache.tapestry.annotations.Parameter;
 
 /**
- * Used by {@link org.apache.tapestry.internal.services.ParameterWorkerTest}.
+ * Used by {@link org.apache.tapestry.internal.transform.ParameterWorkerTest}.
  */
 public class DefaultParameterComponent
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/ParameterComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/ParameterComponent.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/ParameterComponent.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/components/ParameterComponent.java Thu Feb 21 14:28:54 2008
@@ -17,7 +17,7 @@
 import org.apache.tapestry.annotations.Parameter;
 
 /**
- * Used by {@link org.apache.tapestry.internal.services.ParameterWorkerTest}.
+ * Used by {@link org.apache.tapestry.internal.transform.ParameterWorkerTest}.
  */
 public class ParameterComponent
 {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/FieldAccessBean.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/FieldAccessBean.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/FieldAccessBean.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/FieldAccessBean.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/FieldAccessBean.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/FieldAccessBean.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/FieldAccessBean.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.transform;
+package org.apache.tapestry.internal.transform.pages;
 
 public class FieldAccessBean
 {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MaybeStateHolder.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MaybeStateHolder.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MaybeStateHolder.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MaybeStateHolder.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MaybeStateHolder.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MaybeStateHolder.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MaybeStateHolder.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.transform;
+package org.apache.tapestry.internal.transform.pages;
 
 import org.apache.tapestry.annotations.ApplicationState;
 import org.apache.tapestry.internal.services.SimpleASO;

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MethodPrefixTarget.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MethodPrefixTarget.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MethodPrefixTarget.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MethodPrefixTarget.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MethodPrefixTarget.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/MethodPrefixTarget.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/MethodPrefixTarget.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.transform;
+package org.apache.tapestry.internal.transform.pages;
 
 public class MethodPrefixTarget
 {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/ReadOnlyBean.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ReadOnlyBean.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/ReadOnlyBean.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/ReadOnlyBean.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ReadOnlyBean.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/ReadOnlyBean.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/ReadOnlyBean.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.transform;
+package org.apache.tapestry.internal.transform.pages;
 
 public class ReadOnlyBean
 {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/StateHolder.java (from r628959, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/StateHolder.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/StateHolder.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/StateHolder.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/StateHolder.java&r1=628959&r2=630030&rev=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/StateHolder.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/transform/pages/StateHolder.java Thu Feb 21 14:28:54 2008
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.transform;
+package org.apache.tapestry.internal.transform.pages;
 
 import org.apache.tapestry.annotations.ApplicationState;
 import org.apache.tapestry.internal.services.SimpleASO;

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/components/Border.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/components/Border.tml?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/components/Border.tml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/components/Border.tml Thu Feb 21 14:28:54 2008
@@ -19,9 +19,17 @@
         </p>
 
         <p>
-            Currently on page: ${componentResources.pageName}
+            Currently on page: ${componentResources.pageName} (via
+            <span id="secure">${secure}</span>
+            access)
         </p>
 
+
+        <h3>
+            Request info:
+        </h3>
+
+        <t:renderobject object="request"/>
 
         <h3>Fabricated classes:</h3>
 

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/pages/SecurePage.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/pages/SecurePage.tml?rev=630030&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/pages/SecurePage.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/pages/SecurePage.tml Thu Feb 21 14:28:54 2008
@@ -0,0 +1,46 @@
+<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+    <h1>Secure Page Access</h1>
+
+
+    <t:if test="message">
+        <p>
+            Message:
+            <span id="message">${message}</span>
+        </p>
+    </t:if>
+
+    <p>
+        <t:actionlink t:id="secureLink">click</t:actionlink>
+    </p>
+
+    <p>
+        <t:form>
+            <input type="submit" value="Secure Submit"/>
+        </t:form>
+    </p>
+
+    <p>
+        We're also demonstrating the ability to send assets via insecure access.
+    </p>
+
+    <p>
+        The Tapestry banner:
+    </p>
+
+    <img id="icon" src="${icon}"/>
+
+    <p>
+        A classpath asset:
+    </p>
+
+    <img id="button" src="${button}"/>
+
+
+    <p>
+        Relative asset via asset: binding
+    </p>
+
+    <img src="${asset:smiley.png}"/>
+
+</html>
\ No newline at end of file

Modified: tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/AbstractIntegrationTestSuite.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/AbstractIntegrationTestSuite.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/AbstractIntegrationTestSuite.java (original)
+++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/AbstractIntegrationTestSuite.java Thu Feb 21 14:28:54 2008
@@ -24,25 +24,24 @@
 import org.testng.annotations.BeforeClass;
 
 /**
- * A base class for creating integration tests. Ths encapsulates starting up an in-process copy of
- * Jetty, and in-process copy of {@link SeleniumServer}, and a Selenium client.
+ * A base class for creating integration tests. Ths encapsulates starting up an in-process copy of Jetty, and in-process
+ * copy of {@link SeleniumServer}, and a Selenium client.
  * <p/>
- * Unless you are <em>very, very clever</em>, you will want to run the tests sequentially. TestNG
- * tends to run them in an arbitrary order unless you explicitly set the order. If you have managed
- * to get TestNG to run tests in parallel, you may see further problems caused by a single client
- * jumping all over your web application in an unpredictable order.
+ * Unless you are <em>very, very clever</em>, you will want to run the tests sequentially. TestNG tends to run them in
+ * an arbitrary order unless you explicitly set the order. If you have managed to get TestNG to run tests in parallel,
+ * you may see further problems caused by a single client jumping all over your web application in an unpredictable
+ * order.
  * <p/>
- * This class implements the {@link Selenium} interface, and delegates all those methods to the
- * {@link DefaultSelenium} instance it creates. It also extends the normal exception reporting for
- * any failed command or query to produce a more detailed report to the main console.
+ * This class implements the {@link Selenium} interface, and delegates all those methods to the {@link DefaultSelenium}
+ * instance it creates. It also extends the normal exception reporting for any failed command or query to produce a more
+ * detailed report to the main console.
  *
- * @see JettyRunner
+ * @see org.apache.tapestry.test.JettyRunner
  */
 public abstract class AbstractIntegrationTestSuite extends Assert implements Selenium
 {
     /**
-     * Default directory containing the web application to be tested (this conforms to Maven's
-     * default folder).
+     * Default directory containing the web application to be tested (this conforms to Maven's default folder).
      */
     public static final String DEFAULT_WEB_APP_ROOT = "src/main/webapp";
 
@@ -95,8 +94,8 @@
 
     /**
      * @param webAppRoot     web application root (default src/main/webapp)
-     * @param browserCommand browser command to pass to selenium. Default is *firefox, syntax for custom
-     *                       browsers is *custom &lt;path_to_browser&gt;, e.g. *custom /usr/lib/mozilla-firefox/firefox
+     * @param browserCommand browser command to pass to selenium. Default is *firefox, syntax for custom browsers is
+     *                       *custom &lt;path_to_browser&gt;, e.g. *custom /usr/lib/mozilla-firefox/firefox
      */
     protected AbstractIntegrationTestSuite(String webAppRoot, String browserCommand)
     {
@@ -547,8 +546,7 @@
     }
 
     /**
-     * Used to start a typical test, by opening to the base URL and clicking through a series of
-     * links.
+     * Used to start a typical test, by opening to the base URL and clicking through a series of links.
      */
     protected final void start(String... linkText)
     {

Modified: tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/JettyRunner.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/JettyRunner.java?rev=630030&r1=630029&r2=630030&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/JettyRunner.java (original)
+++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/JettyRunner.java Thu Feb 21 14:28:54 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -16,6 +16,7 @@
 
 import org.mortbay.http.NCSARequestLog;
 import org.mortbay.http.SocketListener;
+import org.mortbay.http.SunJsseListener;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.servlet.WebApplicationContext;
 
@@ -23,8 +24,8 @@
 import static java.lang.String.format;
 
 /**
- * Used to start up an instance of the Jetty servlet container in-process, as part of an integration
- * test suite. The started Jetty is reliant on the file <code>src/test/conf/webdefault.xml</code>.
+ * Used to start up an instance of the Jetty servlet container in-process, as part of an integration test suite. The
+ * started Jetty is reliant on the file <code>src/test/conf/webdefault.xml</code>.
  *
  * @see AbstractIntegrationTestSuite
  */
@@ -32,7 +33,9 @@
 {
     public static final String DEFAULT_CONTEXT_PATH = "/";
 
-    public static final int DEFAULT_PORT = 80;
+    public static final int DEFAULT_PORT = 8080;
+
+    public static final int DEFAULT_SECURE_PORT = 8443;
 
     private final File _workingDir;
 
@@ -45,8 +48,7 @@
     private final Server _jetty;
 
     /**
-     * Creates and starts a new instance of Jetty. This should be done from a test case setup
-     * method.
+     * Creates and starts a new instance of Jetty. This should be done from a test case setup method.
      *
      * @param workingDir  current directory (used for any relative files)
      * @param contextPath the context path for the deployed application
@@ -94,6 +96,7 @@
         return format("<JettyRunner %s:%d (%s)>", _contextPath, _port, _warPath);
     }
 
+
     private Server createAndStart()
     {
         try
@@ -102,13 +105,28 @@
             String warPath = new File(_workingDir, _warPath).getPath();
             String webDefaults = new File(_workingDir, "src/test/conf/webdefault.xml").getPath();
 
+            File keystoreFile = new File(_workingDir, "src/test/conf/keystore");
+            String keystore = keystoreFile.getPath();
+
             System.out.printf("Starting Jetty instance on port %d (%s mapped to %s)\n", _port, _contextPath, warPath);
 
             Server server = new Server();
 
+
             SocketListener socketListener = new SocketListener();
             socketListener.setPort(_port);
             server.addListener(socketListener);
+
+            if (keystoreFile.exists())
+            {
+                SunJsseListener secureListener = new SunJsseListener();
+                secureListener.setPort(DEFAULT_SECURE_PORT);
+                secureListener.setKeystore(keystore);
+                secureListener.setPassword("tapestry");
+                secureListener.setKeyPassword("tapestry");
+
+                server.addListener(secureListener);
+            }
 
             NCSARequestLog log = new NCSARequestLog();
             server.setRequestLog(log);