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 2009/09/30 20:26:59 UTC
svn commit: r820373 - in /tiles/framework/trunk/tiles-core/src:
main/java/org/apache/tiles/factory/ main/java/org/apache/tiles/renderer/impl/
test/java/org/apache/tiles/factory/ test/java/org/apache/tiles/renderer/impl/
Author: apetrelli
Date: Wed Sep 30 18:26:58 2009
New Revision: 820373
URL: http://svn.apache.org/viewvc?rev=820373&view=rev
Log:
TILES-470
Now the default renderer is created after the other renderers.
Added an untyped renderer that uses other renderers as delegates.
Added:
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRendererTest.java
- copied, changed from r819379, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java
Removed:
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java
Modified:
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=820373&r1=820372&r2=820373&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Wed Sep 30 18:26:58 2009
@@ -58,7 +58,7 @@
import org.apache.tiles.renderer.impl.DefinitionAttributeRenderer;
import org.apache.tiles.renderer.impl.StringAttributeRenderer;
import org.apache.tiles.renderer.impl.TemplateAttributeRenderer;
-import org.apache.tiles.renderer.impl.UntypedAttributeRenderer;
+import org.apache.tiles.renderer.impl.UntypedDelegateAttributeRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,6 +71,20 @@
public class BasicTilesContainerFactory extends AbstractTilesContainerFactory {
/**
+ * The string renderer name.
+ */
+ private static final String STRING_RENDERER_NAME = "string";
+
+ /**
+ * The template renderer name.
+ */
+ private static final String TEMPLATE_RENDERER_NAME = "template";
+
+ /**
+ * The definition renderer name.
+ */
+ private static final String DEFINITION_RENDERER_NAME = "definition";
+ /**
* The logging object.
*/
private final Logger log = LoggerFactory
@@ -392,31 +406,37 @@
retValue.setRequestContextFactory(contextFactory);
retValue.setContainer(container);
retValue.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
- retValue.setDefaultRenderer(createDefaultAttributeRenderer(applicationContext,
- contextFactory, container, attributeEvaluatorFactory));
registerAttributeRenderers(retValue, applicationContext, contextFactory,
container, attributeEvaluatorFactory);
+ retValue.setDefaultRenderer(createDefaultAttributeRenderer(retValue,
+ applicationContext, contextFactory, container,
+ attributeEvaluatorFactory));
return retValue;
}
/**
* Creates the default attribute renderer. By default it is an
- * {@link UntypedAttributeRenderer}.
+ * {@link UntypedDelegateAttributeRenderer}.
+ *
+ * @param rendererFactory The renderer factory to configure.
* @param applicationContext The Tiles application context.
* @param contextFactory The Tiles context factory.
* @param container The container.
* @param attributeEvaluatorFactory The attribute evaluator factory.
- *
* @return The default attribute renderer.
- * @since 2.2.0
+ * @since 2.2.1
*/
- protected AttributeRenderer createDefaultAttributeRenderer(TilesApplicationContext applicationContext,
+ protected AttributeRenderer createDefaultAttributeRenderer(
+ BasicRendererFactory rendererFactory,
+ TilesApplicationContext applicationContext,
TilesRequestContextFactory contextFactory,
TilesContainer container,
AttributeEvaluatorFactory attributeEvaluatorFactory) {
- UntypedAttributeRenderer retValue = new UntypedAttributeRenderer();
+ UntypedDelegateAttributeRenderer retValue = new UntypedDelegateAttributeRenderer(
+ container, rendererFactory.getRenderer(STRING_RENDERER_NAME),
+ rendererFactory.getRenderer(TEMPLATE_RENDERER_NAME), rendererFactory
+ .getRenderer(DEFINITION_RENDERER_NAME));
retValue.setApplicationContext(applicationContext);
- retValue.setContainer(container);
retValue.setRequestContextFactory(contextFactory);
retValue.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
return retValue;
@@ -461,23 +481,90 @@
TilesRequestContextFactory contextFactory,
TilesContainer container,
AttributeEvaluatorFactory attributeEvaluatorFactory) {
+ rendererFactory.registerRenderer(STRING_RENDERER_NAME,
+ createStringAttributeRenderer(rendererFactory,
+ applicationContext, contextFactory, container,
+ attributeEvaluatorFactory));
+ rendererFactory.registerRenderer(TEMPLATE_RENDERER_NAME,
+ createTemplateAttributeRenderer(rendererFactory,
+ applicationContext, contextFactory, container,
+ attributeEvaluatorFactory));
+ rendererFactory.registerRenderer(DEFINITION_RENDERER_NAME,
+ createDefinitionAttributeRenderer(rendererFactory,
+ applicationContext, contextFactory, container,
+ attributeEvaluatorFactory));
+ }
+
+ /**
+ * Creates a {@link StringAttributeRenderer}.
+ *
+ * @param rendererFactory The renderer factory to configure.
+ * @param applicationContext The Tiles application context.
+ * @param contextFactory The Tiles context factory.
+ * @param container The container.
+ * @param attributeEvaluatorFactory The attribute evaluator factory.
+ * @return The renderer.
+ * @since 2.2.1
+ */
+ protected AttributeRenderer createStringAttributeRenderer(
+ BasicRendererFactory rendererFactory,
+ TilesApplicationContext applicationContext,
+ TilesRequestContextFactory contextFactory,
+ TilesContainer container,
+ AttributeEvaluatorFactory attributeEvaluatorFactory) {
StringAttributeRenderer stringRenderer = new StringAttributeRenderer();
stringRenderer.setApplicationContext(applicationContext);
stringRenderer.setRequestContextFactory(contextFactory);
stringRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
- rendererFactory.registerRenderer("string", stringRenderer);
+ return stringRenderer;
+ }
+ /**
+ * Creates a {@link TemplateAttributeRenderer}.
+ *
+ * @param rendererFactory The renderer factory to configure.
+ * @param applicationContext The Tiles application context.
+ * @param contextFactory The Tiles context factory.
+ * @param container The container.
+ * @param attributeEvaluatorFactory The attribute evaluator factory.
+ * @return The renderer.
+ * @since 2.2.1
+ */
+ protected AttributeRenderer createTemplateAttributeRenderer(
+ BasicRendererFactory rendererFactory,
+ TilesApplicationContext applicationContext,
+ TilesRequestContextFactory contextFactory,
+ TilesContainer container,
+ AttributeEvaluatorFactory attributeEvaluatorFactory) {
TemplateAttributeRenderer templateRenderer = new TemplateAttributeRenderer();
templateRenderer.setApplicationContext(applicationContext);
templateRenderer.setRequestContextFactory(contextFactory);
templateRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
- rendererFactory.registerRenderer("template", templateRenderer);
+ return templateRenderer;
+ }
+ /**
+ * Creates a {@link DefinitionAttributeRenderer}.
+ *
+ * @param rendererFactory The renderer factory to configure.
+ * @param applicationContext The Tiles application context.
+ * @param contextFactory The Tiles context factory.
+ * @param container The container.
+ * @param attributeEvaluatorFactory The attribute evaluator factory.
+ * @return The renderer.
+ * @since 2.2.1
+ */
+ protected AttributeRenderer createDefinitionAttributeRenderer(
+ BasicRendererFactory rendererFactory,
+ TilesApplicationContext applicationContext,
+ TilesRequestContextFactory contextFactory,
+ TilesContainer container,
+ AttributeEvaluatorFactory attributeEvaluatorFactory) {
DefinitionAttributeRenderer definitionRenderer = new DefinitionAttributeRenderer();
definitionRenderer.setApplicationContext(applicationContext);
definitionRenderer.setContainer(container);
definitionRenderer.setRequestContextFactory(contextFactory);
definitionRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
- rendererFactory.registerRenderer("definition", definitionRenderer);
+ return definitionRenderer;
}
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=820373&r1=820372&r2=820373&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Wed Sep 30 18:26:58 2009
@@ -66,6 +66,8 @@
* The default renderer class name.
*
* @since 2.1.0
+ * @deprecated Do not use, the default renderer class should be determined
+ * when building the container.
*/
public static final String DEFAULT_RENDERER_CLASS_NAME =
UntypedAttributeRenderer.class.getName();
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java?rev=820373&r1=820372&r2=820373&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java Wed Sep 30 18:26:58 2009
@@ -33,6 +33,7 @@
*
* @version $Rev$ $Date$
* @since 2.1.0
+ * @deprecated Use {@link UntypedDelegateAttributeRenderer}.
*/
public class UntypedAttributeRenderer extends AbstractBaseAttributeRenderer
implements TilesContainerAware {
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java?rev=820373&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java Wed Sep 30 18:26:58 2009
@@ -0,0 +1,100 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.tiles.renderer.impl;
+
+import java.io.IOException;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.renderer.RendererException;
+
+/**
+ * Renders an attribute that has no associated renderer using delegation to
+ * other renderers.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.1
+ */
+public class UntypedDelegateAttributeRenderer extends AbstractBaseAttributeRenderer {
+
+ /**
+ * The Tiles container.
+ */
+ private TilesContainer container;
+
+ /**
+ * The renderer for attributes of type "string".
+ */
+ private AttributeRenderer stringRenderer;
+
+ /**
+ * The renderer for attributes of type "template".
+ */
+ private AttributeRenderer templateRenderer;
+
+ /**
+ * The renderer for attributes of type "definition".
+ */
+ private AttributeRenderer definitionRenderer;
+
+ /**
+ * Constructor.
+ *
+ * @param container The Tiles container.
+ * @param stringRenderer The renderer for attributes of type "string".
+ * @param templateRenderer The renderer for attributes of type "template".
+ * @param definitionRenderer The renderer for attributes of type
+ * "definition".
+ * @since 2.2.1
+ */
+ public UntypedDelegateAttributeRenderer(TilesContainer container,
+ AttributeRenderer stringRenderer,
+ AttributeRenderer templateRenderer,
+ AttributeRenderer definitionRenderer) {
+ this.container = container;
+ this.stringRenderer = stringRenderer;
+ this.templateRenderer = templateRenderer;
+ this.definitionRenderer = definitionRenderer;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void write(Object value, Attribute attribute,
+ TilesRequestContext request)
+ throws IOException {
+ if (value instanceof String) {
+ String valueString = (String) value;
+ Object[] requestItems = request.getRequestObjects();
+ if (container.isValidDefinition(valueString, requestItems)) {
+ definitionRenderer.render(attribute, request);
+ } else if (valueString.startsWith("/")) {
+ templateRenderer.render(attribute, request);
+ } else {
+ stringRenderer.render(attribute, request);
+ }
+ } else {
+ throw new RendererException(
+ "Cannot render an untyped object attribute");
+ }
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRenderer.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java?rev=820373&r1=820372&r2=820373&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java Wed Sep 30 18:26:58 2009
@@ -20,6 +20,8 @@
*/
package org.apache.tiles.factory;
+import static org.easymock.classextension.EasyMock.*;
+
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@@ -48,7 +50,7 @@
import org.apache.tiles.renderer.impl.DefinitionAttributeRenderer;
import org.apache.tiles.renderer.impl.StringAttributeRenderer;
import org.apache.tiles.renderer.impl.TemplateAttributeRenderer;
-import org.apache.tiles.renderer.impl.UntypedAttributeRenderer;
+import org.apache.tiles.renderer.impl.UntypedDelegateAttributeRenderer;
import org.easymock.EasyMock;
/**
@@ -220,23 +222,97 @@
/**
* Tests
- * {@link BasicTilesContainerFactory#createDefaultAttributeRenderer(TilesApplicationContext,
- * TilesRequestContextFactory, TilesContainer, AttributeEvaluatorFactory)}.
+ * {@link BasicTilesContainerFactory#createDefaultAttributeRenderer(BasicRendererFactory,
+ * TilesApplicationContext, TilesRequestContextFactory, TilesContainer, AttributeEvaluatorFactory)}.
*/
public void testCreateDefaultAttributeRenderer() {
- TilesContainer container = factory.createContainer(applicationContext);
- TilesRequestContextFactory requestContextFactory = factory
- .createRequestContextFactory(applicationContext);
- LocaleResolver resolver = factory.createLocaleResolver(applicationContext,
- requestContextFactory);
- AttributeEvaluatorFactory attributeEvaluatorFactory = factory
- .createAttributeEvaluatorFactory(applicationContext,
- requestContextFactory, resolver);
+ TilesContainer container = createMock(TilesContainer.class);
+ TilesRequestContextFactory requestContextFactory = createMock(TilesRequestContextFactory.class);
+ AttributeEvaluatorFactory attributeEvaluatorFactory = createMock(AttributeEvaluatorFactory.class);
+ BasicRendererFactory rendererFactory = createMock(BasicRendererFactory.class);
+ AttributeRenderer stringRenderer = createMock(AttributeRenderer.class);
+ AttributeRenderer templateRenderer = createMock(AttributeRenderer.class);
+ AttributeRenderer definitionRenderer = createMock(AttributeRenderer.class);
+
+ expect(rendererFactory.getRenderer("string")).andReturn(stringRenderer);
+ expect(rendererFactory.getRenderer("template")).andReturn(templateRenderer);
+ expect(rendererFactory.getRenderer("definition")).andReturn(definitionRenderer);
+
+ replay(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
AttributeRenderer renderer = factory.createDefaultAttributeRenderer(
- applicationContext, requestContextFactory, container,
- attributeEvaluatorFactory);
+ rendererFactory, applicationContext, requestContextFactory,
+ container, attributeEvaluatorFactory);
assertTrue("The default renderer class is not correct",
- renderer instanceof UntypedAttributeRenderer);
+ renderer instanceof UntypedDelegateAttributeRenderer);
+ verify(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
+ }
+
+ /**
+ * Tests
+ * {@link BasicTilesContainerFactory#createStringAttributeRenderer(BasicRendererFactory,
+ * TilesApplicationContext, TilesRequestContextFactory, TilesContainer, AttributeEvaluatorFactory)}.
+ */
+ public void testCreateStringAttributeRenderer() {
+ TilesContainer container = createMock(TilesContainer.class);
+ TilesRequestContextFactory requestContextFactory = createMock(TilesRequestContextFactory.class);
+ AttributeEvaluatorFactory attributeEvaluatorFactory = createMock(AttributeEvaluatorFactory.class);
+ BasicRendererFactory rendererFactory = createMock(BasicRendererFactory.class);
+
+ replay(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
+ AttributeRenderer renderer = factory.createStringAttributeRenderer(
+ rendererFactory, applicationContext, requestContextFactory,
+ container, attributeEvaluatorFactory);
+ assertTrue("The renderer class is not correct",
+ renderer instanceof StringAttributeRenderer);
+ verify(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
+ }
+
+ /**
+ * Tests
+ * {@link BasicTilesContainerFactory#createTemplateAttributeRenderer(BasicRendererFactory,
+ * TilesApplicationContext, TilesRequestContextFactory, TilesContainer, AttributeEvaluatorFactory)}.
+ */
+ public void testCreateTemplateAttributeRenderer() {
+ TilesContainer container = createMock(TilesContainer.class);
+ TilesRequestContextFactory requestContextFactory = createMock(TilesRequestContextFactory.class);
+ AttributeEvaluatorFactory attributeEvaluatorFactory = createMock(AttributeEvaluatorFactory.class);
+ BasicRendererFactory rendererFactory = createMock(BasicRendererFactory.class);
+
+ replay(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
+ AttributeRenderer renderer = factory.createTemplateAttributeRenderer(
+ rendererFactory, applicationContext, requestContextFactory,
+ container, attributeEvaluatorFactory);
+ assertTrue("The renderer class is not correct",
+ renderer instanceof TemplateAttributeRenderer);
+ verify(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
+ }
+
+ /**
+ * Tests
+ * {@link BasicTilesContainerFactory#createDefinitionAttributeRenderer(BasicRendererFactory,
+ * TilesApplicationContext, TilesRequestContextFactory, TilesContainer, AttributeEvaluatorFactory)}.
+ */
+ public void testCreateDefinitionAttributeRenderer() {
+ TilesContainer container = createMock(TilesContainer.class);
+ TilesRequestContextFactory requestContextFactory = createMock(TilesRequestContextFactory.class);
+ AttributeEvaluatorFactory attributeEvaluatorFactory = createMock(AttributeEvaluatorFactory.class);
+ BasicRendererFactory rendererFactory = createMock(BasicRendererFactory.class);
+
+ replay(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
+ AttributeRenderer renderer = factory.createDefinitionAttributeRenderer(
+ rendererFactory, applicationContext, requestContextFactory,
+ container, attributeEvaluatorFactory);
+ assertTrue("The renderer class is not correct",
+ renderer instanceof DefinitionAttributeRenderer);
+ verify(container, requestContextFactory, attributeEvaluatorFactory,
+ rendererFactory);
}
/**
Copied: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRendererTest.java (from r819379, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java)
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRendererTest.java?p2=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRendererTest.java&p1=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java&r1=819379&r2=820373&rev=820373&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedDelegateAttributeRendererTest.java Wed Sep 30 18:26:58 2009
@@ -20,11 +20,11 @@
*/
package org.apache.tiles.renderer.impl;
+import static org.easymock.EasyMock.*;
+
import java.io.IOException;
import java.io.StringWriter;
-import junit.framework.TestCase;
-
import org.apache.tiles.Attribute;
import org.apache.tiles.Expression;
import org.apache.tiles.TilesApplicationContext;
@@ -33,35 +33,66 @@
import org.apache.tiles.context.TilesRequestContextFactory;
import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
+import org.apache.tiles.renderer.AttributeRenderer;
import org.easymock.EasyMock;
+import org.junit.Before;
+import org.junit.Test;
/**
* Tests {@link UntypedAttributeRenderer}.
*
* @version $Rev$ $Date$
*/
-public class UntypedAttributeRendererTest extends TestCase {
+public class UntypedDelegateAttributeRendererTest {
/**
* The renderer.
*/
- private UntypedAttributeRenderer renderer;
+ private UntypedDelegateAttributeRenderer renderer;
+
+ /**
+ * A mock container.
+ */
+ private TilesContainer container;
+
+ /**
+ * A mock string attribute renderer.
+ */
+ private AttributeRenderer stringRenderer;
+
+ /**
+ * A mock template attribute renderer.
+ */
+ private AttributeRenderer templateRenderer;
- /** {@inheritDoc} */
- @Override
- protected void setUp() throws Exception {
- renderer = new UntypedAttributeRenderer();
+ /**
+ * A mock definition attribute renderer.
+ */
+ private AttributeRenderer definitionRenderer;
+
+ /**
+ * Sets up the test.
+ */
+ @Before
+ public void setUp() {
+ container = createMock(TilesContainer.class);
+ stringRenderer = createMock(AttributeRenderer.class);
+ templateRenderer = createMock(AttributeRenderer.class);
+ definitionRenderer = createMock(AttributeRenderer.class);
+ renderer = new UntypedDelegateAttributeRenderer(container,
+ stringRenderer, templateRenderer, definitionRenderer);
renderer.setAttributeEvaluatorFactory(new BasicAttributeEvaluatorFactory(
new DirectAttributeEvaluator()));
}
/**
* Tests
- * {@link StringAttributeRenderer#write(Object, Attribute, TilesRequestContext)}
- * writing a Definition.
+ * {@link UntypedDelegateAttributeRenderer#render(Attribute, TilesRequestContext)}
+ * writing a definition.
*
* @throws IOException If something goes wrong during rendition.
*/
+ @Test
public void testWriteDefinition() throws IOException {
StringWriter writer = new StringWriter();
Attribute attribute = new Attribute("my.definition", (Expression) null,
@@ -70,66 +101,64 @@
.createMock(TilesApplicationContext.class);
TilesRequestContextFactory contextFactory = EasyMock
.createMock(TilesRequestContextFactory.class);
- TilesContainer container = EasyMock.createMock(TilesContainer.class);
TilesRequestContext requestContext = EasyMock
.createMock(TilesRequestContext.class);
- EasyMock.expect(contextFactory.createRequestContext(applicationContext))
- .andReturn(requestContext);
Object[] requestObjects = new Object[0];
- EasyMock.expect(requestContext.getRequestObjects()).andReturn(requestObjects);
- EasyMock.expect(container.isValidDefinition("my.definition"))
+ expect(requestContext.getRequestObjects()).andReturn(requestObjects);
+ expect(container.isValidDefinition("my.definition", requestObjects))
.andReturn(Boolean.TRUE);
- container.render("my.definition");
- EasyMock.replay(applicationContext, contextFactory, requestContext,
- container);
+ definitionRenderer.render(attribute, requestContext);
+
+ replay(applicationContext, contextFactory, requestContext, container,
+ stringRenderer, templateRenderer, definitionRenderer);
renderer.setApplicationContext(applicationContext);
renderer.setRequestContextFactory(contextFactory);
- renderer.setContainer(container);
renderer.render(attribute, requestContext);
writer.close();
+ verify(applicationContext, contextFactory, requestContext,
+ container, stringRenderer, templateRenderer, definitionRenderer);
}
/**
* Tests
- * {@link StringAttributeRenderer#write(Object, Attribute, TilesRequestContext)}
+ * {@link UntypedDelegateAttributeRenderer#render(Attribute, TilesRequestContext)}
* writing a string.
*
* @throws IOException If something goes wrong during rendition.
*/
+ @Test
public void testWriteString() throws IOException {
- StringWriter writer = new StringWriter();
Attribute attribute = new Attribute("Result", (Expression) null, null,
"string");
TilesApplicationContext applicationContext = EasyMock
.createMock(TilesApplicationContext.class);
TilesRequestContextFactory contextFactory = EasyMock
.createMock(TilesRequestContextFactory.class);
- TilesContainer container = EasyMock.createMock(TilesContainer.class);
TilesRequestContext requestContext = EasyMock
.createMock(TilesRequestContext.class);
Object[] requestObjects = new Object[0];
- EasyMock.expect(requestContext.getRequestObjects()).andReturn(requestObjects);
- EasyMock.expect(contextFactory.createRequestContext(applicationContext))
- .andReturn(requestContext);
- EasyMock.expect(container.isValidDefinition("my.definition"))
- .andReturn(Boolean.TRUE);
- EasyMock.expect(requestContext.getWriter()).andReturn(writer);
- EasyMock.replay(applicationContext, contextFactory, requestContext);
+ expect(requestContext.getRequestObjects()).andReturn(requestObjects);
+ expect(container.isValidDefinition("Result", requestObjects))
+ .andReturn(Boolean.FALSE);
+ stringRenderer.render(attribute, requestContext);
+
+ replay(applicationContext, contextFactory, requestContext, container,
+ stringRenderer, templateRenderer, definitionRenderer);
renderer.setApplicationContext(applicationContext);
renderer.setRequestContextFactory(contextFactory);
- renderer.setContainer(container);
renderer.render(attribute, requestContext);
- writer.close();
- assertEquals("Not written 'Result'", "Result", writer.toString());
+ verify(applicationContext, contextFactory, requestContext, container,
+ stringRenderer, templateRenderer, definitionRenderer);
}
/**
* Tests
- * {@link StringAttributeRenderer#write(Object, Attribute, TilesRequestContext)}
+ * {@link UntypedDelegateAttributeRenderer#render(Attribute, TilesRequestContext)}
* writing a template.
*
* @throws IOException If something goes wrong during rendition.
*/
+ @Test
public void testWriteTemplate() throws IOException {
StringWriter writer = new StringWriter();
Attribute attribute = new Attribute("/myTemplate.jsp",
@@ -138,21 +167,21 @@
.createMock(TilesApplicationContext.class);
TilesRequestContextFactory contextFactory = EasyMock
.createMock(TilesRequestContextFactory.class);
- TilesContainer container = EasyMock.createMock(TilesContainer.class);
TilesRequestContext requestContext = EasyMock
.createMock(TilesRequestContext.class);
- EasyMock.expect(contextFactory.createRequestContext(applicationContext))
- .andReturn(requestContext);
Object[] requestObjects = new Object[0];
- EasyMock.expect(requestContext.getRequestObjects()).andReturn(requestObjects);
- requestContext.dispatch("/myTemplate.jsp");
- EasyMock.expect(container.isValidDefinition("my.definition"))
- .andReturn(Boolean.TRUE);
- EasyMock.replay(applicationContext, contextFactory, requestContext);
+ expect(requestContext.getRequestObjects()).andReturn(requestObjects);
+ expect(container.isValidDefinition("/myTemplate.jsp", requestObjects))
+ .andReturn(Boolean.FALSE);
+ templateRenderer.render(attribute, requestContext);
+
+ replay(applicationContext, contextFactory, requestContext, container,
+ stringRenderer, templateRenderer, definitionRenderer);
renderer.setApplicationContext(applicationContext);
renderer.setRequestContextFactory(contextFactory);
- renderer.setContainer(container);
renderer.render(attribute, requestContext);
writer.close();
+ verify(applicationContext, contextFactory, requestContext, container,
+ stringRenderer, templateRenderer, definitionRenderer);
}
}