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/12 21:33:19 UTC

svn commit: r943645 - in /tiles/sandbox/trunk/tiles3: tiles-api/src/main/java/org/apache/tiles/ tiles-core/src/main/java/org/apache/tiles/definition/pattern/ tiles-core/src/main/java/org/apache/tiles/evaluator/ tiles-core/src/main/java/org/apache/tiles...

Author: apetrelli
Date: Wed May 12 19:33:19 2010
New Revision: 943645

URL: http://svn.apache.org/viewvc?rev=943645&view=rev
Log:
TILESSB-11
Added more tests.

TILESSB-10
Removed some dead code.

Added:
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java   (with props)
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java   (with props)
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java   (with props)
Removed:
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/RegexpPatternDefinitionResolver.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolver.java
Modified:
    tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactoryException.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java

Modified: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java?rev=943645&r1=943644&r2=943645&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java Wed May 12 19:33:19 2010
@@ -100,8 +100,11 @@ public class BasicAttributeContext imple
             }
             this.preparer = context.getPreparer();
             this.attributes = new HashMap<String, Attribute>();
-            for (String name : context.getLocalAttributeNames()) {
-                attributes.put(name, new Attribute(context.getLocalAttribute(name)));
+            Set<String> parentAttributeNames = context.getLocalAttributeNames();
+            if (parentAttributeNames != null) {
+                for (String name : parentAttributeNames) {
+                    attributes.put(name, new Attribute(context.getLocalAttribute(name)));
+                }
             }
             inheritCascadedAttributes(context);
         }
@@ -143,9 +146,12 @@ public class BasicAttributeContext imple
             copyCascadedAttributes((BasicAttributeContext) context);
         } else {
             this.cascadedAttributes = new HashMap<String, Attribute>();
-            for (String name : context.getCascadedAttributeNames()) {
-                cascadedAttributes.put(name, new Attribute(context
-                        .getCascadedAttribute(name)));
+            Set<String> parentAttributeNames = context.getCascadedAttributeNames();
+            if (parentAttributeNames != null) {
+                for (String name : parentAttributeNames) {
+                    cascadedAttributes.put(name, new Attribute(context
+                            .getCascadedAttribute(name)));
+                }
             }
         }
     }

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java?rev=943645&r1=943644&r2=943645&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java Wed May 12 19:33:19 2010
@@ -55,7 +55,7 @@ public class EvaluationException extends
      * @param e The cause.
      * @since 2.2.0
      */
-    public EvaluationException(Exception e) {
+    public EvaluationException(Throwable e) {
         super(e);
     }
 
@@ -66,7 +66,7 @@ public class EvaluationException extends
      * @param e The cause.
      * @since 2.2.0
      */
-    public EvaluationException(String message, Exception e) {
+    public EvaluationException(String message, Throwable e) {
         super(message, e);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactoryException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactoryException.java?rev=943645&r1=943644&r2=943645&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactoryException.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactoryException.java Wed May 12 19:33:19 2010
@@ -54,7 +54,7 @@ public class TilesContainerFactoryExcept
      * @param e The exception to be wrapped.
      * @since 2.1.0
      */
-    public TilesContainerFactoryException(Exception e) {
+    public TilesContainerFactoryException(Throwable e) {
         super(e);
     }
 
@@ -65,7 +65,7 @@ public class TilesContainerFactoryExcept
      * @param e The exception to be wrapped.
      * @since 2.1.0
      */
-    public TilesContainerFactoryException(String message, Exception e) {
+    public TilesContainerFactoryException(String message, Throwable e) {
         super(message, e);
     }
 

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=943645&r1=943644&r2=943645&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 Wed May 12 19:33:19 2010
@@ -23,6 +23,7 @@ package org.apache.tiles.impl;
 import java.io.IOException;
 import java.util.Deque;
 import java.util.LinkedList;
+import java.util.Map;
 
 import org.apache.tiles.Attribute;
 import org.apache.tiles.AttributeContext;
@@ -95,11 +96,6 @@ public class BasicTilesContainer impleme
      */
     private AttributeEvaluatorFactory attributeEvaluatorFactory;
 
-    /**
-     * Initialization flag. If set, this container cannot be changed.
-     */
-    private boolean initialized = false;
-
     /** {@inheritDoc} */
     public AttributeContext startContext(Request request) {
         AttributeContext context = new BasicAttributeContext();
@@ -169,7 +165,6 @@ public class BasicTilesContainer impleme
      * @param definitionsFactory the definitions factory for this instance.
      */
     public void setDefinitionsFactory(DefinitionsFactory definitionsFactory) {
-        checkInit();
         this.definitionsFactory = definitionsFactory;
     }
 
@@ -215,19 +210,14 @@ public class BasicTilesContainer impleme
 
     /** {@inheritDoc} */
     public void render(String definitionName, Request request) {
-        if (log.isDebugEnabled()) {
-            log.debug("Render request recieved for definition '" + definitionName + "'");
-        }
+        log.debug("Render request received for definition '{}'", definitionName);
 
         Definition definition = getDefinition(definitionName, request);
 
         if (definition == null) {
-            if (log.isWarnEnabled()) {
-                String message = "Unable to find the definition '" + definitionName + "'";
-                log.warn(message);
-            }
-            throw new NoSuchDefinitionException(definitionName);
+            throw new NoSuchDefinitionException("Unable to find the definition '" + definitionName + "'");
         }
+
         render(request, definition);
     }
 
@@ -238,12 +228,12 @@ public class BasicTilesContainer impleme
             throw new CannotRenderException("Cannot render a null attribute");
         }
 
-        AttributeRenderer renderer = rendererFactory.getRenderer(attr
-                .getRenderer());
+        String rendererName = attr.getRenderer();
+        AttributeRenderer renderer = rendererFactory.getRenderer(rendererName);
         if (renderer == null) {
             throw new CannotRenderException(
                     "Cannot render an attribute with renderer name "
-                            + attr.getRenderer());
+                            + rendererName);
         }
         renderer.render(attr, request);
     }
@@ -257,7 +247,14 @@ public class BasicTilesContainer impleme
 
     /** {@inheritDoc} */
     public boolean isValidDefinition(String definitionName, Request request) {
-        return isValidDefinition(request, definitionName);
+        try {
+            Definition definition = getDefinition(definitionName, request);
+            return definition != null;
+        } catch (NoSuchDefinitionException nsde) {
+            log.debug("Cannot find definition '{}'", definitionName);
+            log.debug("Exception related to the not found definition", nsde);
+            return false;
+        }
     }
 
     /**
@@ -277,20 +274,6 @@ public class BasicTilesContainer impleme
     }
 
     /**
-     * Determine whether or not the container has been
-     * initialized. Utility method used for methods which
-     * can not be invoked after the container has been
-     * started.
-     *
-     * @throws IllegalStateException if the container has already been initialized.
-     */
-    protected void checkInit() {
-        if (initialized) {
-            throw new IllegalStateException("Container allready initialized");
-        }
-    }
-
-    /**
      * Returns the context stack.
      *
      * @param tilesContext The Tiles context object to use.
@@ -299,13 +282,12 @@ public class BasicTilesContainer impleme
      */
     @SuppressWarnings("unchecked")
     protected Deque<AttributeContext> getContextStack(Request tilesContext) {
-        Deque<AttributeContext> contextStack =
-            (Deque<AttributeContext>) tilesContext
-                .getContext("request").get(ATTRIBUTE_CONTEXT_STACK);
+        Map<String, Object> requestScope = tilesContext.getContext("request");
+        Deque<AttributeContext> contextStack = (Deque<AttributeContext>) requestScope
+                .get(ATTRIBUTE_CONTEXT_STACK);
         if (contextStack == null) {
             contextStack = new LinkedList<AttributeContext>();
-            tilesContext.getContext("request").put(ATTRIBUTE_CONTEXT_STACK,
-                    contextStack);
+            requestScope.put(ATTRIBUTE_CONTEXT_STACK, contextStack);
         }
 
         return contextStack;
@@ -364,9 +346,7 @@ public class BasicTilesContainer impleme
      */
     private void prepare(Request context, String preparerName, boolean ignoreMissing) {
 
-        if (log.isDebugEnabled()) {
-            log.debug("Prepare request received for '" + preparerName);
-        }
+        log.debug("Prepare request received for '{}'", preparerName);
 
         ViewPreparer preparer = preparerFactory.getPreparer(preparerName, context);
         if (preparer == null && ignoreMissing) {
@@ -383,34 +363,6 @@ public class BasicTilesContainer impleme
     }
 
     /**
-     * Renders the definition with specified name.
-     *
-     * @param request The request context.
-     * @param definitionName The name of the definition to render.
-     * @throws NoSuchDefinitionException If the definition has not been found.
-     * @throws DefinitionsFactoryException If something goes wrong when
-     * obtaining the definition.
-     * @since 2.1.3
-     */
-    protected void render(Request request, String definitionName) {
-
-        if (log.isDebugEnabled()) {
-            log.debug("Render request recieved for definition '" + definitionName + "'");
-        }
-
-        Definition definition = getDefinition(definitionName, request);
-
-        if (definition == null) {
-            if (log.isWarnEnabled()) {
-                String message = "Unable to find the definition '" + definitionName + "'";
-                log.warn(message);
-            }
-            throw new NoSuchDefinitionException(definitionName);
-        }
-        render(request, definition);
-    }
-
-    /**
      * Renders the specified definition.
      * @param request The request context.
      * @param definition The definition to render.
@@ -452,24 +404,4 @@ public class BasicTilesContainer impleme
             throw new CannotRenderException(e.getMessage(), e);
         }
     }
-
-    /**
-     * Checks if a string is a valid definition name.
-     *
-     * @param context The request context.
-     * @param definitionName The name of the definition to find.
-     * @return <code>true</code> if <code>definitionName</code> is a valid
-     * definition name.
-     */
-    private boolean isValidDefinition(Request context, String definitionName) {
-        try {
-            Definition definition = getDefinition(definitionName, context);
-            return definition != null;
-        } catch (NoSuchDefinitionException nsde) {
-            return false;
-        } catch (DefinitionsFactoryException e) {
-            // TODO, is this the right thing to do?
-            return false;
-        }
-    }
 }

Added: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java?rev=943645&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java Wed May 12 19:33:19 2010
@@ -0,0 +1,77 @@
+/*
+ * $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.evaluator;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link EvaluationException}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class EvaluatorExceptionTest {
+
+    /**
+     * Test method for {@link EvaluationException#EvaluationException()}.
+     */
+    @Test
+    public void testEvaluationException() {
+        EvaluationException exception = new EvaluationException();
+        assertNull(exception.getMessage());
+        assertNull(exception.getCause());
+    }
+
+    /**
+     * Test method for {@link EvaluationException#EvaluationException(java.lang.String)}.
+     */
+    @Test
+    public void testEvaluationExceptionString() {
+        EvaluationException exception = new EvaluationException("my message");
+        assertEquals("my message", exception.getMessage());
+        assertNull(exception.getCause());
+    }
+
+    /**
+     * Test method for {@link EvaluationException#EvaluationException(java.lang.Throwable)}.
+     */
+    @Test
+    public void testEvaluationExceptionThrowable() {
+        Throwable cause = new Throwable();
+        EvaluationException exception = new EvaluationException(cause);
+        assertEquals(cause.toString(), exception.getMessage());
+        assertEquals(cause, exception.getCause());
+    }
+
+    /**
+     * Test method for {@link EvaluationException#EvaluationException(java.lang.String, java.lang.Throwable)}.
+     */
+    @Test
+    public void testEvaluationExceptionStringThrowable() {
+        Throwable cause = new Throwable();
+        EvaluationException exception = new EvaluationException("my message", cause);
+        assertEquals("my message", exception.getMessage());
+        assertEquals(cause, exception.getCause());
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/EvaluatorExceptionTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java?rev=943645&r1=943644&r2=943645&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java Wed May 12 19:33:19 2010
@@ -20,26 +20,30 @@
  */
 package org.apache.tiles.evaluator.impl;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.*;
 
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Expression;
 import org.apache.tiles.request.Request;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests {@link DirectAttributeEvaluator}.
  *
  * @version $Rev$ $Date$
  */
-public class DirectAttributeEvaluatorTest extends TestCase {
+public class DirectAttributeEvaluatorTest {
 
     /**
      * The evaluator to test.
      */
     private DirectAttributeEvaluator evaluator;
 
-    /** {@inheritDoc} */
-    @Override
+    /**
+     * Sets up the test.
+     */
+    @Before
     public void setUp() {
         evaluator = new DirectAttributeEvaluator();
     }
@@ -48,6 +52,7 @@ public class DirectAttributeEvaluatorTes
      * Tests
      * {@link DirectAttributeEvaluator#evaluate(Attribute, Request)}.
      */
+    @Test
     public void testEvaluate() {
         String expression = "This is an expression";
         Attribute attribute = new Attribute(null, Expression.createExpression(
@@ -64,8 +69,18 @@ public class DirectAttributeEvaluatorTes
 
     /**
      * Tests
+     * {@link DirectAttributeEvaluator#evaluate(Attribute, Request)}.
+     */
+    @Test(expected=IllegalArgumentException.class)
+    public void testEvaluateNullAttribute() {
+        evaluator.evaluate((Attribute) null, null);
+    }
+
+    /**
+     * Tests
      * {@link DirectAttributeEvaluator#evaluate(String, Request)}.
      */
+    @Test
     public void testEvaluateString() {
         String expression = "This is an expression";
         Object result = evaluator.evaluate(expression, null);

Added: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java?rev=943645&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java Wed May 12 19:33:19 2010
@@ -0,0 +1,77 @@
+/*
+ * $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.factory;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link TilesContainerFactoryException}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class TilesContainerFactoryExceptionTest {
+
+    /**
+     * Test method for {@link TilesContainerFactoryException#TilesContainerFactoryException()}.
+     */
+    @Test
+    public void testTilesContainerFactoryException() {
+        TilesContainerFactoryException exception = new TilesContainerFactoryException();
+        assertNull(exception.getMessage());
+        assertNull(exception.getCause());
+    }
+
+    /**
+     * Test method for {@link TilesContainerFactoryException#TilesContainerFactoryException(java.lang.String)}.
+     */
+    @Test
+    public void testTilesContainerFactoryExceptionString() {
+        TilesContainerFactoryException exception = new TilesContainerFactoryException("my message");
+        assertEquals("my message", exception.getMessage());
+        assertNull(exception.getCause());
+    }
+
+    /**
+     * Test method for {@link TilesContainerFactoryException#TilesContainerFactoryException(java.lang.Throwable)}.
+     */
+    @Test
+    public void testTilesContainerFactoryExceptionThrowable() {
+        Throwable cause = new Throwable();
+        TilesContainerFactoryException exception = new TilesContainerFactoryException(cause);
+        assertEquals(cause.toString(), exception.getMessage());
+        assertEquals(cause, exception.getCause());
+    }
+
+    /**
+     * Test method for {@link TilesContainerFactoryException#TilesContainerFactoryException(java.lang.String, java.lang.Throwable)}.
+     */
+    @Test
+    public void testTilesContainerFactoryExceptionStringThrowable() {
+        Throwable cause = new Throwable();
+        TilesContainerFactoryException exception = new TilesContainerFactoryException("my message", cause);
+        assertEquals("my message", exception.getMessage());
+        assertEquals(cause, exception.getCause());
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryExceptionTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 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=943645&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java Wed May 12 19:33:19 2010
@@ -0,0 +1,784 @@
+/**
+ *
+ */
+package org.apache.tiles.impl;
+
+import static org.easymock.classextension.EasyMock.*;
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+import java.util.Deque;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.AttributeContext;
+import org.apache.tiles.BasicAttributeContext;
+import org.apache.tiles.Definition;
+import org.apache.tiles.definition.DefinitionsFactory;
+import org.apache.tiles.definition.NoSuchDefinitionException;
+import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.preparer.NoSuchPreparerException;
+import org.apache.tiles.preparer.PreparerFactory;
+import org.apache.tiles.preparer.ViewPreparer;
+import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.renderer.RendererFactory;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.Request;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link BasicTilesContainer}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class BasicTilesContainerUnitTest {
+
+    /**
+     * Name used to store attribute context stack.
+     */
+    private static final String ATTRIBUTE_CONTEXT_STACK =
+        "org.apache.tiles.AttributeContext.STACK";
+
+    private ApplicationContext applicationContext;
+
+    private DefinitionsFactory definitionsFactory;
+
+    private PreparerFactory preparerFactory;
+
+    private RendererFactory rendererFactory;
+
+    private AttributeEvaluatorFactory attributeEvaluatorFactory;
+
+    private BasicTilesContainer container;
+
+    /**
+     * Sets up the test.
+     */
+    @Before
+    public void setUp() {
+        applicationContext = createMock(ApplicationContext.class);
+        definitionsFactory = createMock(DefinitionsFactory.class);
+        preparerFactory = createMock(PreparerFactory.class);
+        rendererFactory = createMock(RendererFactory.class);
+        attributeEvaluatorFactory = createMock(AttributeEvaluatorFactory.class);
+        container = new BasicTilesContainer();
+        container.setApplicationContext(applicationContext);
+        container.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
+        container.setDefinitionsFactory(definitionsFactory);
+        container.setPreparerFactory(preparerFactory);
+        container.setRendererFactory(rendererFactory);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#startContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testStartContext() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+        expect(attributeContext.getCascadedAttributeNames()).andReturn(null);
+        deque.push(isA(BasicAttributeContext.class));
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        assertTrue(container.startContext(request) instanceof BasicAttributeContext);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#endContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testEndContext() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.pop()).andReturn(attributeContext);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        container.endContext(request);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#renderContext(org.apache.tiles.request.Request)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test
+    public void testRenderContext() throws IOException {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        ViewPreparer preparer = createMock(ViewPreparer.class);
+        Attribute templateAttribute = createMock(Attribute.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+        expect(attributeContext.getPreparer()).andReturn(null);
+        expect(attributeContext.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(templateAttribute.getRenderer()).andReturn("renderer");
+        expect(rendererFactory.getRenderer("renderer")).andReturn(renderer);
+        renderer.render(templateAttribute, request);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, templateAttribute, renderer);
+        container.renderContext(request);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, templateAttribute, renderer);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getApplicationContext()}.
+     */
+    @Test
+    public void testGetApplicationContext() {
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory);
+        assertEquals(applicationContext, container.getApplicationContext());
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getAttributeContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetAttributeContext() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        assertEquals(attributeContext, container.getAttributeContext(request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getAttributeContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetAttributeContextNew() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope).times(2);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque).times(2);
+        expect(deque.isEmpty()).andReturn(true);
+        deque.push(isA(BasicAttributeContext.class));
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        assertTrue(container.getAttributeContext(request) instanceof BasicAttributeContext);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getDefinitionsFactory()}.
+     */
+    @Test
+    public void testGetDefinitionsFactory() {
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory);
+        assertEquals(definitionsFactory, container.getDefinitionsFactory());
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getPreparerFactory()}.
+     */
+    @Test
+    public void testGetPreparerFactory() {
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory);
+        assertEquals(preparerFactory, container.getPreparerFactory());
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#prepare(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testPrepare() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        ViewPreparer preparer = createMock(ViewPreparer.class);
+
+        expect(preparerFactory.getPreparer("preparer", request)).andReturn(preparer);
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+        preparer.execute(request, attributeContext);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer);
+        container.prepare("preparer", request);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#prepare(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test(expected=NoSuchPreparerException.class)
+    public void testPrepareException() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(preparerFactory.getPreparer("preparer", request)).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        try {
+            container.prepare("preparer", request);
+        } finally {
+            verify(applicationContext, attributeEvaluatorFactory,
+                    definitionsFactory, preparerFactory, rendererFactory,
+                    request, requestScope, deque, attributeContext);
+        }
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(java.lang.String, org.apache.tiles.request.Request)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test
+    public void testRenderStringRequest() throws IOException {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        ViewPreparer preparer = createMock(ViewPreparer.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+        Definition definition = createMock(Definition.class);
+
+        Attribute templateAttribute = Attribute.createTemplateAttribute("/my/template.jsp");
+
+        expect(definitionsFactory.getDefinition("definition", request)).andReturn(definition);
+        expect(request.getContext("request")).andReturn(requestScope).times(3);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque).times(3);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+        expect(attributeContext.getPreparer()).andReturn(null);
+        expect(attributeContext.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(attributeContext.getLocalAttributeNames()).andReturn(null);
+        expect(attributeContext.getCascadedAttributeNames()).andReturn(null);
+        expect(definition.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(rendererFactory.getRenderer("template")).andReturn(renderer);
+        deque.push(isA(BasicAttributeContext.class));
+        renderer.render(templateAttribute, request);
+        expect(deque.pop()).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, renderer, 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(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test(expected=NoSuchDefinitionException.class)
+    public void testRenderStringRequestException() {
+        Request request = createMock(Request.class);
+
+        expect(definitionsFactory.getDefinition("definition", request)).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request);
+        try {
+            container.render("definition", request);
+        } finally {
+            verify(applicationContext, attributeEvaluatorFactory,
+                    definitionsFactory, preparerFactory, rendererFactory);
+        }
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#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 templateAttribute = createMock(Attribute.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+
+        expect(templateAttribute.getRenderer()).andReturn("renderer");
+        expect(rendererFactory.getRenderer("renderer")).andReturn(renderer);
+        renderer.render(templateAttribute, request);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                templateAttribute, renderer);
+        container.render(templateAttribute, request);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                templateAttribute, renderer);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test(expected=CannotRenderException.class)
+    public void testRenderAttributeRequestException1() throws IOException {
+        Request request = createMock(Request.class);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request);
+        try {
+            container.render((Attribute) null, request);
+        } finally {
+            verify(applicationContext, attributeEvaluatorFactory,
+                    definitionsFactory, preparerFactory, rendererFactory,
+                    request);
+        }
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test(expected=CannotRenderException.class)
+    public void testRenderAttributeRequestException2() throws IOException {
+        Request request = createMock(Request.class);
+        Attribute templateAttribute = createMock(Attribute.class);
+
+        expect(templateAttribute.getRenderer()).andReturn("renderer");
+        expect(rendererFactory.getRenderer("renderer")).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                templateAttribute);
+        try {
+            container.render(templateAttribute, request);
+        } finally {
+            verify(applicationContext, attributeEvaluatorFactory,
+                    definitionsFactory, preparerFactory, rendererFactory,
+                    request, templateAttribute);
+        }
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#evaluate(org.apache.tiles.Attribute, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testEvaluate() {
+        Request request = createMock(Request.class);
+        AttributeEvaluator evaluator = createMock(AttributeEvaluator.class);
+        Attribute templateAttribute = createMock(Attribute.class);
+
+        expect(attributeEvaluatorFactory.getAttributeEvaluator(templateAttribute)).andReturn(evaluator);
+        expect(evaluator.evaluate(templateAttribute, request)).andReturn(new Integer(1));
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                templateAttribute, evaluator);
+        assertEquals(new Integer(1), container.evaluate(templateAttribute, request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                templateAttribute, evaluator);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#isValidDefinition(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testIsValidDefinition() {
+        Request request = createMock(Request.class);
+        Definition definition = createMock(Definition.class);
+
+        expect(definitionsFactory.getDefinition("definition", request)).andReturn(definition);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request, definition);
+        assertTrue(container.isValidDefinition("definition", request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request, definition);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#isValidDefinition(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testIsValidDefinitionNull() {
+        Request request = createMock(Request.class);
+
+        expect(definitionsFactory.getDefinition("definition", request)).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request);
+        assertFalse(container.isValidDefinition("definition", request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#isValidDefinition(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testIsValidDefinitionException() {
+        Request request = createMock(Request.class);
+
+        expect(definitionsFactory.getDefinition("definition", request))
+                .andThrow(new NoSuchDefinitionException());
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request);
+        assertFalse(container.isValidDefinition("definition", request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getDefinition(java.lang.String, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetDefinition() {
+        Request request = createMock(Request.class);
+        Definition definition = createMock(Definition.class);
+
+        expect(definitionsFactory.getDefinition("definition", request)).andReturn(definition);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request, definition);
+        assertEquals(definition, container.getDefinition("definition", request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request, definition);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContextStack(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetContextStack() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque);
+        assertEquals(deque, container.getContextStack(request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContextStack(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetContextStackNew() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(null);
+        expect(requestScope.put(eq(ATTRIBUTE_CONTEXT_STACK), isA(LinkedList.class))).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope);
+        assertTrue(container.getContextStack(request) instanceof LinkedList);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#pushContext(org.apache.tiles.AttributeContext, org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testPushContext() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        deque.push(attributeContext);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        container.pushContext(attributeContext, request);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#popContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testPopContext() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.pop()).andReturn(attributeContext);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        assertEquals(attributeContext, container.popContext(request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetContext() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+        assertEquals(attributeContext, container.getContext(request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#getContext(org.apache.tiles.request.Request)}.
+     */
+    @Test
+    public void testGetContextNull() {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+
+        expect(request.getContext("request")).andReturn(requestScope);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque);
+        expect(deque.isEmpty()).andReturn(true);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque);
+        assertNull(container.getContext(request));
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque);
+    }
+
+    /**
+     * Test method for {@link org.apache.tiles.impl.BasicTilesContainer#render(org.apache.tiles.request.Request, org.apache.tiles.Definition)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test
+    public void testRenderRequestDefinition() throws IOException {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        ViewPreparer preparer = createMock(ViewPreparer.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+        Definition definition = createMock(Definition.class);
+
+        Attribute templateAttribute = Attribute.createTemplateAttribute("/my/template.jsp");
+
+        expect(request.getContext("request")).andReturn(requestScope).times(3);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque).times(3);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+        expect(attributeContext.getPreparer()).andReturn(null);
+        expect(attributeContext.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(attributeContext.getLocalAttributeNames()).andReturn(null);
+        expect(attributeContext.getCascadedAttributeNames()).andReturn(null);
+        expect(definition.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(rendererFactory.getRenderer("template")).andReturn(renderer);
+        deque.push(isA(BasicAttributeContext.class));
+        renderer.render(templateAttribute, request);
+        expect(deque.pop()).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, renderer, definition);
+        container.render(request, definition);
+        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)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test(expected=CannotRenderException.class)
+    public void testRenderRequestDefinitionException() throws IOException {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        ViewPreparer preparer = createMock(ViewPreparer.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+        Definition definition = createMock(Definition.class);
+
+        Attribute templateAttribute = Attribute.createTemplateAttribute("/my/template.jsp");
+
+        expect(request.getContext("request")).andReturn(requestScope).times(3);
+        expect(requestScope.get(ATTRIBUTE_CONTEXT_STACK)).andReturn(deque).times(3);
+        expect(deque.isEmpty()).andReturn(false);
+        expect(deque.peek()).andReturn(attributeContext);
+        expect(attributeContext.getPreparer()).andReturn(null);
+        expect(attributeContext.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(attributeContext.getLocalAttributeNames()).andReturn(null);
+        expect(attributeContext.getCascadedAttributeNames()).andReturn(null);
+        expect(definition.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(rendererFactory.getRenderer("template")).andReturn(renderer);
+        deque.push(isA(BasicAttributeContext.class));
+        renderer.render(templateAttribute, request);
+        expectLastCall().andThrow(new IOException());
+        expect(deque.pop()).andReturn(null);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, renderer, definition);
+        try {
+            container.render(request, definition);
+        } finally {
+            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.AttributeContext)}.
+     * @throws IOException If something goes wrong.
+     */
+    @Test
+    public void testRenderRequestAttributeContext() throws IOException {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        ViewPreparer preparer = createMock(ViewPreparer.class);
+        Attribute templateAttribute = createMock(Attribute.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+
+        expect(attributeContext.getPreparer()).andReturn(null);
+        expect(attributeContext.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(templateAttribute.getRenderer()).andReturn("renderer");
+        expect(rendererFactory.getRenderer("renderer")).andReturn(renderer);
+        renderer.render(templateAttribute, request);
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, templateAttribute, renderer);
+        container.render(request, attributeContext);
+        verify(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, preparer, templateAttribute, renderer);
+    }
+
+    /**
+     * 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.
+     */
+    @Test(expected=CannotRenderException.class)
+    public void testRenderRequestAttributeContextException() throws IOException {
+        Request request = createMock(Request.class);
+        Map<String, Object> requestScope = createMock(Map.class);
+        Deque<AttributeContext> deque = createMock(Deque.class);
+        AttributeContext attributeContext = createMock(AttributeContext.class);
+        Attribute templateAttribute = createMock(Attribute.class);
+        AttributeRenderer renderer = createMock(AttributeRenderer.class);
+
+        expect(attributeContext.getPreparer()).andReturn("preparer").times(2);
+        expect(preparerFactory.getPreparer("preparer", request)).andReturn(null);
+        expect(attributeContext.getTemplateAttribute()).andReturn(templateAttribute);
+        expect(templateAttribute.getRenderer()).andReturn("renderer");
+        expect(rendererFactory.getRenderer("renderer")).andReturn(renderer);
+        renderer.render(templateAttribute, request);
+        expectLastCall().andThrow(new IOException());
+
+        replay(applicationContext, attributeEvaluatorFactory,
+                definitionsFactory, preparerFactory, rendererFactory, request,
+                requestScope, deque, attributeContext, templateAttribute, renderer);
+        try {
+            container.render(request, attributeContext);
+        } finally {
+            verify(applicationContext, attributeEvaluatorFactory,
+                    definitionsFactory, preparerFactory, rendererFactory,
+                    request, requestScope, deque, attributeContext,
+                    templateAttribute, renderer);
+        }
+    }
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerUnitTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL