You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2010/05/23 20:59:54 UTC
svn commit: r947468 - in /tiles/sandbox/trunk/tiles3: tiles-api/
tiles-api/src/main/java/org/apache/tiles/
tiles-api/src/test/java/org/apache/tiles/
tiles-core/src/main/java/org/apache/tiles/factory/
tiles-core/src/main/java/org/apache/tiles/impl/ tile...
Author: apetrelli
Date: Sun May 23 18:59:53 2010
New Revision: 947468
URL: http://svn.apache.org/viewvc?rev=947468&view=rev
Log:
TILESSB-34
Now CachingTilesContainer is a decorator of a generic TilesContainer.
Added more methods to TilesContainer.
Added:
tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java (with props)
tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java (with props)
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java (with props)
Modified:
tiles/sandbox/trunk/tiles3/tiles-api/pom.xml
tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java
tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
tiles/sandbox/trunk/tiles3/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java
Modified: tiles/sandbox/trunk/tiles3/tiles-api/pom.xml
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/pom.xml?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/pom.xml (original)
+++ tiles/sandbox/trunk/tiles3/tiles-api/pom.xml Sun May 23 18:59:53 2010
@@ -89,8 +89,8 @@
</dependency>
<dependency>
<groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <version>2.5.1</version>
+ <artifactId>easymockclassextension</artifactId>
+ <version>2.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
Modified: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java Sun May 23 18:59:53 2010
@@ -95,6 +95,13 @@ public interface TilesContainer {
void render(String definition, Request request);
/**
+ * Renders the specified definition.
+ * @param definition The definition to render.
+ * @param request The request context.
+ */
+ public void render(Definition definition, Request request);
+
+ /**
* Render the given Attribute.
*
* @param attribute The attribute to render.
@@ -116,6 +123,18 @@ public interface TilesContainer {
Object evaluate(Attribute attribute, Request request);
/**
+ * Returns a definition specifying its name.
+ *
+ * @param definitionName The name of the definition to find.
+ * @param request The request context.
+ * @return The definition, if found.
+ * @throws DefinitionsFactoryException If the definitions factory throws an
+ * exception.
+ */
+ public Definition getDefinition(String definitionName,
+ Request request);
+
+ /**
* Determine whether or not the definition exists.
*
* @param definition the name of the definition.
Added: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java?rev=947468&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java Sun May 23 18:59:53 2010
@@ -0,0 +1,82 @@
+package org.apache.tiles;
+
+import java.io.IOException;
+
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.Request;
+
+public class TilesContainerWrapper implements TilesContainer {
+
+ protected TilesContainer container;
+
+ public TilesContainerWrapper(TilesContainer container) {
+ this.container = container;
+ if (container == null) {
+ throw new NullPointerException("The wrapped container must be not null");
+ }
+ }
+
+ public TilesContainer getWrappedContainer() {
+ return container;
+ }
+
+ @Override
+ public void endContext(Request request) {
+ container.endContext(request);
+ }
+
+ @Override
+ public Object evaluate(Attribute attribute, Request request) {
+ return container.evaluate(attribute, request);
+ }
+
+ @Override
+ public ApplicationContext getApplicationContext() {
+ return container.getApplicationContext();
+ }
+
+ @Override
+ public AttributeContext getAttributeContext(Request request) {
+ return container.getAttributeContext(request);
+ }
+
+ @Override
+ public Definition getDefinition(String definitionName, Request request) {
+ return container.getDefinition(definitionName, request);
+ }
+
+ @Override
+ public boolean isValidDefinition(String definition, Request request) {
+ return container.isValidDefinition(definition, request);
+ }
+
+ @Override
+ public void prepare(String preparer, Request request) {
+ container.prepare(preparer, request);
+ }
+
+ @Override
+ public void render(String definition, Request request) {
+ container.render(definition, request);
+ }
+
+ @Override
+ public void render(Definition definition, Request request) {
+ container.render(definition, request);
+ }
+
+ @Override
+ public void render(Attribute attribute, Request request) throws IOException {
+ container.render(attribute, request);
+ }
+
+ @Override
+ public void renderContext(Request request) {
+ container.renderContext(request);
+ }
+
+ @Override
+ public AttributeContext startContext(Request request) {
+ return container.startContext(request);
+ }
+}
Propchange: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainerWrapper.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java?rev=947468&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java Sun May 23 18:59:53 2010
@@ -0,0 +1,229 @@
+/**
+ *
+ */
+package org.apache.tiles;
+
+import static org.easymock.classextension.EasyMock.*;
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.Request;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link TilesContainerWrapper}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class TilesContainerWrapperTest {
+
+ private TilesContainer container;
+
+ private TilesContainerWrapper wrapper;
+
+ /**
+ * Sets up the test.
+ */
+ @Before
+ public void setUp() {
+ container = createMock(TilesContainer.class);
+ wrapper = new TilesContainerWrapper(container);
+ }
+
+ /**
+ * Tests {@link TilesContainerWrapper#TilesContainerWrapper(TilesContainer)}.
+ */
+ @Test(expected=NullPointerException.class)
+ public void testTilesContainerWrapperNPE() {
+ new TilesContainerWrapper(null);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#getWrappedContainer()}.
+ */
+ @Test
+ public void testGetWrappedContainer() {
+ replay(container);
+ assertSame(container, wrapper.getWrappedContainer());
+ verify(container);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#endContext(org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testEndContext() {
+ Request request = createMock(Request.class);
+
+ container.endContext(request);
+
+ replay(container, request);
+ wrapper.endContext(request);
+ verify(container, request);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#evaluate(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testEvaluate() {
+ Request request = createMock(Request.class);
+ Attribute attribute = createMock(Attribute.class);
+
+ expect(container.evaluate(attribute, request)).andReturn(new Integer(1));
+
+ replay(container, request, attribute);
+ assertEquals(new Integer(1), wrapper.evaluate(attribute, request));
+ verify(container, request, attribute);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#getApplicationContext()}.
+ */
+ @Test
+ public void testGetApplicationContext() {
+ ApplicationContext applicationContext = createMock(ApplicationContext.class);
+
+ expect(container.getApplicationContext()).andReturn(applicationContext);
+
+ replay(container, applicationContext);
+ assertSame(applicationContext, wrapper.getApplicationContext());
+ verify(container, applicationContext);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#getAttributeContext(org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testGetAttributeContext() {
+ Request request = createMock(Request.class);
+ AttributeContext attribute = createMock(AttributeContext.class);
+
+ expect(container.getAttributeContext(request)).andReturn(attribute);
+
+ replay(container, request, attribute);
+ assertSame(attribute, wrapper.getAttributeContext(request));
+ verify(container, request, attribute);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#getDefinition(java.lang.String, org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testGetDefinition() {
+ Request request = createMock(Request.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(container.getDefinition("definition", request)).andReturn(definition);
+
+ replay(container, request, definition);
+ assertSame(definition, wrapper.getDefinition("definition", request));
+ verify(container, request, definition);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#isValidDefinition(java.lang.String, org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testIsValidDefinition() {
+ Request request = createMock(Request.class);
+
+ expect(container.isValidDefinition("definition", request)).andReturn(true);
+
+ replay(container, request);
+ assertTrue(wrapper.isValidDefinition("definition", request));
+ verify(container, request);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#prepare(java.lang.String, org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testPrepare() {
+ Request request = createMock(Request.class);
+
+ container.prepare("preparer", request);
+
+ replay(container, request);
+ wrapper.prepare("preparer", request);
+ verify(container, request);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#render(java.lang.String, org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testRenderStringRequest() {
+ Request request = createMock(Request.class);
+
+ container.render("definition", request);
+
+ replay(container, request);
+ wrapper.render("definition", request);
+ verify(container, request);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#render(org.apache.tiles.Definition, org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testRenderDefinitionRequest() {
+ Request request = createMock(Request.class);
+ Definition definition = createMock(Definition.class);
+
+ container.render(definition, request);
+
+ replay(container, request, definition);
+ wrapper.render(definition, request);
+ verify(container, request, definition);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#render(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+ * @throws IOException If something goes wrong.
+ */
+ @Test
+ public void testRenderAttributeRequest() throws IOException {
+ Request request = createMock(Request.class);
+ Attribute attribute = createMock(Attribute.class);
+
+ container.render(attribute, request);
+
+ replay(container, request, attribute);
+ wrapper.render(attribute, request);
+ verify(container, request, attribute);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#renderContext(org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testRenderContext() {
+ Request request = createMock(Request.class);
+
+ container.renderContext(request);
+
+ replay(container, request);
+ wrapper.renderContext(request);
+ verify(container, request);
+ }
+
+ /**
+ * Test method for {@link org.apache.tiles.TilesContainerWrapper#startContext(org.apache.tiles.request.Request)}.
+ */
+ @Test
+ public void testStartContext() {
+ Request request = createMock(Request.class);
+ AttributeContext attribute = createMock(AttributeContext.class);
+
+ expect(container.startContext(request)).andReturn(attribute);
+
+ replay(container, request, attribute);
+ assertSame(attribute, wrapper.startContext(request));
+ verify(container, request, attribute);
+ }
+
+}
Propchange: tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/TilesContainerWrapperTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Sun May 23 18:59:53 2010
@@ -92,9 +92,10 @@ public class BasicTilesContainerFactory
applicationContext, resolver);
container.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
container.setPreparerFactory(createPreparerFactory(applicationContext));
+ TilesContainer injectedContainer = createDecoratedContainer(container, applicationContext);
container.setRendererFactory(createRendererFactory(applicationContext,
- container, attributeEvaluatorFactory));
- return container;
+ injectedContainer, attributeEvaluatorFactory));
+ return injectedContainer;
}
/**
@@ -110,6 +111,19 @@ public class BasicTilesContainerFactory
}
/**
+ * Instantiate the container that will be injected to child objects.
+ *
+ * @param originalContainer The original instantiated container.
+ * @param context The Tiles application context object.
+ * @return The instantiated container.
+ * @since 3.0.0
+ */
+ protected TilesContainer createDecoratedContainer(TilesContainer originalContainer,
+ ApplicationContext context) {
+ return originalContainer;
+ }
+
+ /**
* Creates the definitions factory. By default it creates a
* {@link UnresolvingLocaleDefinitionsFactory} with default dependencies.
*
Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Sun May 23 18:59:53 2010
@@ -31,7 +31,6 @@ import org.apache.tiles.BasicAttributeCo
import org.apache.tiles.Definition;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.definition.DefinitionsFactory;
-import org.apache.tiles.definition.DefinitionsFactoryException;
import org.apache.tiles.definition.NoSuchDefinitionException;
import org.apache.tiles.evaluator.AttributeEvaluator;
import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
@@ -218,7 +217,27 @@ public class BasicTilesContainer impleme
throw new NoSuchDefinitionException("Unable to find the definition '" + definitionName + "'");
}
- render(request, definition);
+ render(definition, request);
+ }
+
+ /**
+ * Renders the specified definition.
+ * @param definition The definition to render.
+ * @param request The request context.
+ * @since 2.1.3
+ */
+ public void render(Definition definition, Request request) {
+ AttributeContext originalContext = getAttributeContext(request);
+ BasicAttributeContext subContext = new BasicAttributeContext(originalContext);
+ subContext.inherit(definition);
+
+ pushContext(subContext, request);
+
+ try {
+ render(request, subContext);
+ } finally {
+ popContext(request);
+ }
}
/** {@inheritDoc} */
@@ -257,16 +276,9 @@ public class BasicTilesContainer impleme
}
}
- /**
- * Returns a definition specifying its name.
- *
- * @param definitionName The name of the definition to find.
- * @param request The request context.
- * @return The definition, if found.
- * @throws DefinitionsFactoryException If the definitions factory throws an
- * exception.
- */
- protected Definition getDefinition(String definitionName,
+ /** {@inheritDoc} */
+ @Override
+ public Definition getDefinition(String definitionName,
Request request) {
Definition definition =
definitionsFactory.getDefinition(definitionName, request);
@@ -363,26 +375,6 @@ public class BasicTilesContainer impleme
}
/**
- * Renders the specified definition.
- * @param request The request context.
- * @param definition The definition to render.
- * @since 2.1.3
- */
- protected void render(Request request, Definition definition) {
- AttributeContext originalContext = getAttributeContext(request);
- BasicAttributeContext subContext = new BasicAttributeContext(originalContext);
- subContext.inherit(definition);
-
- pushContext(subContext, request);
-
- try {
- render(request, subContext);
- } finally {
- popContext(request);
- }
- }
-
- /**
* Renders the specified attribute context.
*
* @param request The request context.
Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java Sun May 23 18:59:53 2010
@@ -22,17 +22,14 @@ package org.apache.tiles.impl.mgmt;
import java.util.HashMap;
import java.util.Map;
-import java.util.Set;
-import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.TilesContainerWrapper;
import org.apache.tiles.definition.DefinitionsFactory;
import org.apache.tiles.definition.NoSuchDefinitionException;
-import org.apache.tiles.impl.BasicTilesContainer;
import org.apache.tiles.mgmt.MutableTilesContainer;
import org.apache.tiles.request.Request;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Manages custom and configured definitions, so they can be used by the
@@ -40,12 +37,7 @@ import org.slf4j.LoggerFactory;
*
* @version $Rev$ $Date$
*/
-public class CachingTilesContainer extends BasicTilesContainer implements MutableTilesContainer {
-
- /**
- * The logging object.
- */
- private final Logger log = LoggerFactory.getLogger(CachingTilesContainer.class);
+public class CachingTilesContainer extends TilesContainerWrapper implements MutableTilesContainer {
/**
* The default name of the attribute in which storing custom definitions.
@@ -60,18 +52,21 @@ public class CachingTilesContainer exten
/**
* Constructor.
+ * @param originalContainer The original container to wrap.
*/
- public CachingTilesContainer() {
+ public CachingTilesContainer(TilesContainer originalContainer) {
+ super(originalContainer);
definitionsAttributeName = DEFAULT_DEFINITIONS_ATTRIBUTE_NAME;
}
/**
* Constructor.
- *
+ * @param originalContainer The original container to wrap.
* @param definitionsAttributeName The name of the attribute in which
* storing custom definitions.
*/
- public CachingTilesContainer(String definitionsAttributeName) {
+ public CachingTilesContainer(TilesContainer originalContainer, String definitionsAttributeName) {
+ super(originalContainer);
this.definitionsAttributeName = definitionsAttributeName;
if (this.definitionsAttributeName == null) {
this.definitionsAttributeName = DEFAULT_DEFINITIONS_ATTRIBUTE_NAME;
@@ -89,12 +84,21 @@ public class CachingTilesContainer exten
*/
public Definition getDefinition(String definition,
Request request) {
- Map<String, Definition> definitions =
- getDefinitions(request);
- if (definitions != null && definitions.containsKey(definition)) {
- return definitions.get(definition);
+ Definition retValue = null;
+ retValue = getCustomDefinition(definition, request);
+ if (retValue == null) {
+ retValue = super.getDefinition(definition, request);
}
- return super.getDefinition(definition, request);
+ return retValue;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isValidDefinition(String definition, Request request) {
+ if (getCustomDefinition(definition, request) != null) {
+ return true;
+ }
+ return super.isValidDefinition(definition, request);
}
/** {@inheritDoc} */
@@ -104,49 +108,30 @@ public class CachingTilesContainer exten
if (definition.getName() == null) {
definition.setName(getNextUniqueDefinitionName(definitions));
}
- validate(definition);
if (definition.isExtending()) {
this.resolveInheritance(definition, request);
}
definitions.put(definition.getName(), definition);
-
}
- /**
- * Validates a custom definition.
- *
- * @param definition The definition to validate.
- */
- private void validate(Definition definition) {
- Set<String> names = definition.getLocalAttributeNames();
- if (names != null) {
- for (String name : names) {
- Attribute attribute = definition.getLocalAttribute(name);
- if (attribute.getValue() == null) {
- throw new IllegalArgumentException(
- "Attribute '" + name + "' value not defined");
- }
- }
- }
- names = definition.getCascadedAttributeNames();
- if (names != null) {
- for (String name : names) {
- Attribute attribute = definition.getCascadedAttribute(name);
- if (attribute.getValue() == null) {
- throw new IllegalArgumentException(
- "Attribute '" + name + "' value not defined");
- }
- }
+ /** {@inheritDoc} */
+ @Override
+ public void render(String definition, Request request) {
+ Definition toRender = getDefinition(definition, request);
+ if (toRender == null) {
+ throw new NoSuchDefinitionException(
+ "Cannot find definition named '" + definition + "'");
}
+ super.render(toRender, request);
}
/**
* Resolve inheritance.
* First, resolve parent's inheritance, then set template to the parent's
* template.
- * Also copy attributes setted in parent, and not set in child
+ * Also copy attributes set in parent, and not set in child
* If instance doesn't extend anything, do nothing.
*
* @param definition The definition that needs to have its inheritances
@@ -155,38 +140,35 @@ public class CachingTilesContainer exten
* @throws org.apache.tiles.definition.DefinitionsFactoryException If an
* inheritance can not be solved.
*/
- protected void resolveInheritance(Definition definition,
+ private void resolveInheritance(Definition definition,
Request request) {
// Already done, or not needed ?
if (!definition.isExtending()) {
return;
}
- if (log.isDebugEnabled()) {
- log.debug("Resolve definition for child name='"
- + definition.getName()
- + "' extends='" + definition.getExtends() + "'.");
- }
-
- // TODO Factories our factory implementations will be context agnostic,
- // however, this may cause errors for other implementations.
- // we should probably make all factories agnostic and allow the manager to
- // utilize the correct factory based on the context.
- Definition parent = getDefinition(definition.getExtends(), request);
-
- if (parent == null) { // error
- String msg = "Error while resolving definition inheritance: child '"
- + definition.getName()
- + "' can't find its ancestor '"
- + definition.getExtends()
- + "'. Please check your description file.";
- log.error(msg);
- // to do : find better exception
- throw new NoSuchDefinitionException(msg);
+ String parentDefinitionName = definition.getExtends();
+
+ boolean recurse = true;
+ Definition parent = getCustomDefinition(parentDefinitionName, request);
+ if (parent == null) {
+ parent = container.getDefinition(parentDefinitionName, request);
+ recurse = false;
+ }
+
+ if (parent == null) {
+ throw new NoSuchDefinitionException(
+ "Error while resolving definition inheritance: child '"
+ + definition.getName()
+ + "' can't find its ancestor '"
+ + parentDefinitionName
+ + "'. Please check your description file.");
}
// Resolve parent before itself.
- resolveInheritance(parent, request);
+ if (recurse) {
+ resolveInheritance(parent, request);
+ }
definition.inherit(parent);
}
@@ -197,7 +179,7 @@ public class CachingTilesContainer exten
* @return A map that connects a definition name to a definition.
*/
@SuppressWarnings("unchecked")
- protected Map<String, Definition> getDefinitions(
+ private Map<String, Definition> getDefinitions(
Request request) {
return (Map<String, Definition>) request.getContext("request")
.get(definitionsAttributeName);
@@ -211,11 +193,10 @@ public class CachingTilesContainer exten
* @return A map that connects a definition name to a definition.
*/
@SuppressWarnings("unchecked")
- protected Map<String, Definition> getOrCreateDefinitions(
+ private Map<String, Definition> getOrCreateDefinitions(
Request request) {
Map<String, Definition> definitions =
- (Map<String, Definition>) request
- .getContext("request").get(definitionsAttributeName);
+ (Map<String, Definition>) request.getContext("request").get(definitionsAttributeName);
if (definitions == null) {
definitions = new HashMap<String, Definition>();
request.getContext("request")
@@ -232,7 +213,7 @@ public class CachingTilesContainer exten
* @return The unique definition name to be used to store the definition.
* @since 2.1.0
*/
- protected String getNextUniqueDefinitionName(
+ private String getNextUniqueDefinitionName(
Map<String, Definition> definitions) {
String candidate;
int anonymousDefinitionIndex = 1;
@@ -244,4 +225,12 @@ public class CachingTilesContainer exten
return candidate;
}
+
+ private Definition getCustomDefinition(String definition, Request request) {
+ Map<String, Definition> definitions = getDefinitions(request);
+ if (definitions != null) {
+ return definitions.get(definition);
+ }
+ return null;
+ }
}
Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java Sun May 23 18:59:53 2010
@@ -75,6 +75,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#startContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testStartContext() {
Request request = createMock(Request.class);
@@ -101,6 +102,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#endContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testEndContext() {
Request request = createMock(Request.class);
@@ -125,6 +127,7 @@ public class BasicTilesContainerUnitTest
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#renderContext(org.apache.tiles.request.Request)}.
* @throws IOException If something goes wrong.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testRenderContext() throws IOException {
Request request = createMock(Request.class);
@@ -169,6 +172,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getAttributeContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testGetAttributeContext() {
Request request = createMock(Request.class);
@@ -193,6 +197,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getAttributeContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testGetAttributeContextNew() {
Request request = createMock(Request.class);
@@ -241,6 +246,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#prepare(java.lang.String, org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testPrepare() {
Request request = createMock(Request.class);
@@ -268,6 +274,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#prepare(java.lang.String, org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test(expected=NoSuchPreparerException.class)
public void testPrepareException() {
Request request = createMock(Request.class);
@@ -290,9 +297,10 @@ public class BasicTilesContainerUnitTest
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(java.lang.String, org.apache.tiles.request.Request)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, java.lang.String)}.
* @throws IOException If something goes wrong.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testRenderStringRequest() throws IOException {
Request request = createMock(Request.class);
@@ -330,7 +338,7 @@ public class BasicTilesContainerUnitTest
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(java.lang.String, org.apache.tiles.request.Request)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, java.lang.String)}.
*/
@Test(expected=NoSuchDefinitionException.class)
public void testRenderStringRequestException() {
@@ -349,7 +357,7 @@ public class BasicTilesContainerUnitTest
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.Attribute)}.
* @throws IOException If something goes wrong.
*/
@Test
@@ -372,7 +380,7 @@ public class BasicTilesContainerUnitTest
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.Attribute)}.
* @throws IOException If something goes wrong.
*/
@Test(expected=CannotRenderException.class)
@@ -391,7 +399,7 @@ public class BasicTilesContainerUnitTest
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.Attribute)}.
* @throws IOException If something goes wrong.
*/
@Test(expected=CannotRenderException.class)
@@ -505,6 +513,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContextStack(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testGetContextStack() {
Request request = createMock(Request.class);
@@ -526,6 +535,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContextStack(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testGetContextStackNew() {
Request request = createMock(Request.class);
@@ -547,6 +557,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#pushContext(org.apache.tiles.AttributeContext, org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testPushContext() {
Request request = createMock(Request.class);
@@ -570,6 +581,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#popContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testPopContext() {
Request request = createMock(Request.class);
@@ -593,6 +605,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testGetContext() {
Request request = createMock(Request.class);
@@ -617,6 +630,7 @@ public class BasicTilesContainerUnitTest
/**
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContext(org.apache.tiles.request.Request)}.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testGetContextNull() {
Request request = createMock(Request.class);
@@ -637,9 +651,10 @@ public class BasicTilesContainerUnitTest
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.Definition)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Definition, org.apache.tiles.request.Request)}.
* @throws IOException If something goes wrong.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testRenderRequestDefinition() throws IOException {
Request request = createMock(Request.class);
@@ -669,16 +684,17 @@ public class BasicTilesContainerUnitTest
replay(applicationContext, attributeEvaluatorFactory,
definitionsFactory, preparerFactory, rendererFactory, request,
requestScope, deque, attributeContext, preparer, renderer, definition);
- container.render(request, definition);
+ container.render(definition, request);
verify(applicationContext, attributeEvaluatorFactory,
definitionsFactory, preparerFactory, rendererFactory, request,
requestScope, deque, attributeContext, preparer, renderer, definition);
}
/**
- * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.Definition)}.
+ * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Definition, org.apache.tiles.request.Request)}.
* @throws IOException If something goes wrong.
*/
+ @SuppressWarnings("unchecked")
@Test(expected=CannotRenderException.class)
public void testRenderRequestDefinitionException() throws IOException {
Request request = createMock(Request.class);
@@ -710,7 +726,7 @@ public class BasicTilesContainerUnitTest
definitionsFactory, preparerFactory, rendererFactory, request,
requestScope, deque, attributeContext, preparer, renderer, definition);
try {
- container.render(request, definition);
+ container.render(definition, request);
} finally {
verify(applicationContext, attributeEvaluatorFactory,
definitionsFactory, preparerFactory, rendererFactory,
@@ -723,6 +739,7 @@ public class BasicTilesContainerUnitTest
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.AttributeContext)}.
* @throws IOException If something goes wrong.
*/
+ @SuppressWarnings("unchecked")
@Test
public void testRenderRequestAttributeContext() throws IOException {
Request request = createMock(Request.class);
@@ -752,6 +769,7 @@ public class BasicTilesContainerUnitTest
* Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.AttributeContext)}.
* @throws IOException If something goes wrong.
*/
+ @SuppressWarnings("unchecked")
@Test(expected=CannotRenderException.class)
public void testRenderRequestAttributeContextException() throws IOException {
Request request = createMock(Request.class);
Added: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java?rev=947468&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java Sun May 23 18:59:53 2010
@@ -0,0 +1,378 @@
+/**
+ *
+ */
+package org.apache.tiles.impl.mgmt;
+
+import static org.easymock.EasyMock.*;
+import static org.easymock.classextension.EasyMock.*;
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.Definition;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.definition.NoSuchDefinitionException;
+import org.apache.tiles.request.Request;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link CachingTilesContainer}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class CachingTilesContainerTest {
+
+ /**
+ * The default name of the attribute in which storing custom definitions.
+ */
+ private static final String DEFAULT_DEFINITIONS_ATTRIBUTE_NAME = "org.apache.tiles.impl.mgmt.DefinitionManager.DEFINITIONS";
+
+ private TilesContainer wrapped;
+
+ private CachingTilesContainer container;
+
+ /**
+ * Sets up the test.
+ */
+ @Before
+ public void setUp() {
+ wrapped = createMock(TilesContainer.class);
+ container = new CachingTilesContainer(wrapped);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#CachingTilesContainer(org.apache.tiles.TilesContainer, java.lang.String)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testCachingTilesContainerTilesContainerString() {
+ TilesContainer wrapped = createMock(TilesContainer.class);
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get("myattribute")).andReturn(definitions);
+ expect(definitions.get("definition")).andReturn(definition);
+
+ replay(wrapped, request, definitions, scope, definition);
+ CachingTilesContainer container = new CachingTilesContainer(wrapped,
+ "myattribute");
+ assertSame(definition, container.getDefinition("definition", request));
+ verify(wrapped, request, definitions, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#CachingTilesContainer(TilesContainer, String)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testCachingTilesContainer() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+ TilesContainer wrapped = createMock(TilesContainer.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definitions.get("definition")).andReturn(definition);
+
+ replay(wrapped, request, definitions, scope, definition);
+ CachingTilesContainer container = new CachingTilesContainer(wrapped,
+ null);
+ assertSame(definition, container.getDefinition("definition", request));
+ verify(wrapped, request, definitions, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#getDefinition(java.lang.String, org.apache.tiles.request.Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetDefinition() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definitions.get("definition")).andReturn(definition);
+
+ replay(wrapped, request, definitions, scope, definition);
+ assertSame(definition, container.getDefinition("definition", request));
+ verify(wrapped, request, definitions, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#getDefinition(java.lang.String, org.apache.tiles.request.Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetDefinitionContainer() {
+ Request request = createMock(Request.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ null);
+ expect(wrapped.getDefinition("definition", request)).andReturn(
+ definition);
+
+ replay(wrapped, request, scope, definition);
+ assertSame(definition, container.getDefinition("definition", request));
+ verify(wrapped, request, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#isValidDefinition(String, Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testIsValidDefinition() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definitions.get("definition")).andReturn(definition);
+
+ replay(wrapped, request, definitions, scope, definition);
+ assertTrue(container.isValidDefinition("definition", request));
+ verify(wrapped, request, definitions, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#isValidDefinition(String, Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testIsValidDefinitionContainer() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definitions.get("definition")).andReturn(null);
+ expect(wrapped.isValidDefinition("definition", request)).andReturn(true);
+
+ replay(wrapped, request, definitions, scope);
+ assertTrue(container.isValidDefinition("definition", request));
+ verify(wrapped, request, definitions, scope);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#register(org.apache.tiles.Definition, org.apache.tiles.request.Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testRegister() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definition.getName()).andReturn(null);
+ expect(definitions.containsKey("$anonymousMutableDefinition1"))
+ .andReturn(false);
+ definition.setName("$anonymousMutableDefinition1");
+ expect(definition.isExtending()).andReturn(true);
+ // trick to test resolve definition separately.
+ expect(definition.isExtending()).andReturn(false);
+ expect(definition.getName()).andReturn("$anonymousMutableDefinition1");
+ expect(definitions.put("$anonymousMutableDefinition1", definition))
+ .andReturn(null);
+
+ replay(wrapped, request, definitions, scope, definition);
+ container.register(definition, request);
+ verify(wrapped, request, definitions, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#register(org.apache.tiles.Definition, org.apache.tiles.request.Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testRegisterInheritance() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+ Definition parent = createMock(Definition.class);
+ Definition grandparent = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope).anyTimes();
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions).anyTimes();
+ expect(definition.getName()).andReturn(null);
+ expect(definitions.containsKey("$anonymousMutableDefinition1"))
+ .andReturn(false);
+ definition.setName("$anonymousMutableDefinition1");
+ expect(definition.isExtending()).andReturn(true);
+ // trick to test resolve definition separately.
+ expect(definition.isExtending()).andReturn(true);
+ expect(definition.getExtends()).andReturn("parent");
+ expect(definitions.get("parent")).andReturn(parent);
+ expect(parent.isExtending()).andReturn(true);
+ expect(parent.getExtends()).andReturn("grandparent");
+ expect(definition.getName()).andReturn("$anonymousMutableDefinition1");
+ expect(definitions.get("grandparent")).andReturn(null);
+ expect(wrapped.getDefinition("grandparent", request)).andReturn(
+ grandparent);
+ parent.inherit(grandparent);
+ definition.inherit(parent);
+ expect(definitions.put("$anonymousMutableDefinition1", definition))
+ .andReturn(null);
+
+ replay(wrapped, request, definitions, scope, definition, parent,
+ grandparent);
+ container.register(definition, request);
+ verify(wrapped, request, definitions, scope, definition, parent,
+ grandparent);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#register(org.apache.tiles.Definition, org.apache.tiles.request.Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test(expected = NoSuchDefinitionException.class)
+ public void testRegisterInheritanceFail() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope).anyTimes();
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions).anyTimes();
+ expect(definition.getName()).andReturn(null);
+ expect(definitions.containsKey("$anonymousMutableDefinition1"))
+ .andReturn(false);
+ definition.setName("$anonymousMutableDefinition1");
+ expect(definition.isExtending()).andReturn(true);
+ // trick to test resolve definition separately.
+ expect(definition.isExtending()).andReturn(true);
+ expect(definition.getExtends()).andReturn("parent");
+ expect(definitions.get("parent")).andReturn(null);
+ expect(wrapped.getDefinition("parent", request)).andReturn(null);
+ expect(definition.getName()).andReturn("$anonymousMutableDefinition1");
+
+ replay(wrapped, request, definitions, scope, definition);
+ try {
+ container.register(definition, request);
+ } finally {
+ verify(wrapped, request, definitions, scope, definition);
+ }
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#register(org.apache.tiles.Definition, org.apache.tiles.request.Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testRegisterCreateDefinitions() {
+ Request request = createMock(Request.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope).anyTimes();
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ null);
+ expect(scope.put(eq(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME), isA(HashMap.class))).andReturn(null);
+ expect(definition.getName()).andReturn(null);
+ definition.setName("$anonymousMutableDefinition1");
+ expect(definition.isExtending()).andReturn(true);
+ // trick to test resolve definition separately.
+ expect(definition.isExtending()).andReturn(false);
+ expect(definition.getName()).andReturn("$anonymousMutableDefinition1");
+
+ replay(wrapped, request, scope, definition);
+ container.register(definition, request);
+ verify(wrapped, request, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#render(String, Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testRender() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+ Definition definition = createMock(Definition.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definitions.get("definition")).andReturn(definition);
+ container.render(definition, request);
+
+ replay(wrapped, request, definitions, scope, definition);
+ container.render("definition", request);
+ verify(wrapped, request, definitions, scope, definition);
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tiles.impl.mgmt.CachingTilesContainer#render(String, Request)}
+ * .
+ */
+ @SuppressWarnings("unchecked")
+ @Test(expected=NoSuchDefinitionException.class)
+ public void testRenderFail() {
+ Request request = createMock(Request.class);
+ Map<String, Definition> definitions = createMock(Map.class);
+ Map<String, Object> scope = createMock(Map.class);
+
+ expect(request.getContext("request")).andReturn(scope);
+ expect(scope.get(DEFAULT_DEFINITIONS_ATTRIBUTE_NAME)).andReturn(
+ definitions);
+ expect(definitions.get("definition")).andReturn(null);
+ expect(wrapped.getDefinition("definition", request)).andReturn(null);
+
+ replay(wrapped, request, definitions, scope);
+ try {
+ container.render("definition", request);
+ } finally {
+ verify(wrapped, request, definitions, scope);
+ }
+ }
+}
Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/mgmt/CachingTilesContainerTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java Sun May 23 18:59:53 2010
@@ -59,7 +59,6 @@ import org.apache.tiles.evaluator.BasicA
import org.apache.tiles.factory.BasicTilesContainerFactory;
import org.apache.tiles.factory.TilesContainerFactoryException;
import org.apache.tiles.freemarker.renderer.FreeMarkerAttributeRenderer;
-import org.apache.tiles.impl.BasicTilesContainer;
import org.apache.tiles.impl.mgmt.CachingTilesContainer;
import org.apache.tiles.locale.LocaleResolver;
import org.apache.tiles.mvel.MVELAttributeEvaluator;
@@ -114,9 +113,10 @@ public class CompleteAutoloadTilesContai
/** {@inheritDoc} */
@Override
- protected BasicTilesContainer instantiateContainer(
+ public TilesContainer createDecoratedContainer(
+ TilesContainer originalContainer,
ApplicationContext applicationContext) {
- return new CachingTilesContainer();
+ return new CachingTilesContainer(originalContainer);
}
/** {@inheritDoc} */
Modified: tiles/sandbox/trunk/tiles3/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java?rev=947468&r1=947467&r2=947468&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java Sun May 23 18:59:53 2010
@@ -85,12 +85,19 @@ public class CompleteAutoloadTilesContai
/**
* Test method for
- * {@link CompleteAutoloadTilesContainerFactory#instantiateContainer(ApplicationContext)}
+ * {@link CompleteAutoloadTilesContainerFactory#createDecoratedContainer(TilesContainer, ApplicationContext)
* .
*/
@Test
- public void testInstantiateContainerTilesApplicationContext() {
- assertTrue(factory.instantiateContainer(null) instanceof CachingTilesContainer);
+ public void testCreateDecoratedContainer() {
+ ApplicationContext applicationContext = createMock(ServletApplicationContext.class);
+ TilesContainer wrapped = createMock(TilesContainer.class);
+
+ replay(applicationContext, wrapped);
+ assertSame(wrapped, ((CachingTilesContainer) factory
+ .createDecoratedContainer(wrapped, applicationContext))
+ .getWrappedContainer());
+ verify(applicationContext, wrapped);
}
/**