blob: bc51c6b65d6ed76951c2b871fdb0f7343ab8b58b [file] [log] [blame]
/*
* $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;
import static org.junit.Assert.*;
import static org.easymock.EasyMock.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
/**
* Tests <code>BasicAttributeContext</code>.
*
* @version $Rev$ $Date$
*/
public class BasicAttributeContextTest {
/**
* Tests {@link BasicAttributeContext#BasicAttributeContext()}.
*/
@Test
public void testBasicAttributeContext() {
AttributeContext context = new BasicAttributeContext();
assertNull("There are some spurious attributes", context
.getLocalAttributeNames());
assertNull("There are some spurious attributes", context
.getCascadedAttributeNames());
}
/**
* Tests {@link BasicAttributeContext#BasicAttributeContext(Map)}.
*/
@Test
public void testBasicAttributeContextMapOfStringAttribute() {
Map<String, Attribute> name2attrib = new HashMap<String, Attribute>();
Attribute attribute = new Attribute("Value 1");
name2attrib.put("name1", attribute);
attribute = new Attribute("Value 2");
name2attrib.put("name2", attribute);
AttributeContext context = new BasicAttributeContext(name2attrib);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2",
attribute.getValue());
}
/**
* Tests
* {@link BasicAttributeContext#BasicAttributeContext(AttributeContext)}.
*/
@Test
public void testBasicAttributeContextAttributeContext() {
Set<String> localAttributes = new LinkedHashSet<String>();
Set<String> cascadedAttributes = new LinkedHashSet<String>();
localAttributes.add("local1");
localAttributes.add("local2");
cascadedAttributes.add("cascaded1");
cascadedAttributes.add("cascaded2");
AttributeContext toCopy = createMock(AttributeContext.class);
expect(toCopy.getLocalAttributeNames()).andReturn(localAttributes);
expect(toCopy.getLocalAttribute("local1")).andReturn(
new Attribute("value1")).anyTimes();
expect(toCopy.getLocalAttribute("local2")).andReturn(
new Attribute("value2")).anyTimes();
expect(toCopy.getCascadedAttributeNames())
.andReturn(cascadedAttributes);
expect(toCopy.getCascadedAttribute("cascaded1")).andReturn(
new Attribute("value3")).anyTimes();
expect(toCopy.getCascadedAttribute("cascaded2")).andReturn(
new Attribute("value4")).anyTimes();
Attribute templateAttribute = new Attribute("/template.jsp", Expression
.createExpression("expression", null), "role1,role2",
"template");
expect(toCopy.getTemplateAttribute()).andReturn(templateAttribute);
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
expect(toCopy.getPreparer()).andReturn("my.preparer.Preparer");
replay(toCopy);
BasicAttributeContext context = new BasicAttributeContext(toCopy);
assertEquals("The template has not been set correctly",
"/template.jsp", context.getTemplateAttribute().getValue());
assertEquals("The template expression has not been set correctly",
"expression", context.getTemplateAttribute()
.getExpressionObject().getExpression());
assertEquals("The roles are not the same", roles, context
.getTemplateAttribute().getRoles());
assertEquals("The preparer has not been set correctly",
"my.preparer.Preparer", context.getPreparer());
Attribute attribute = context.getLocalAttribute("local1");
assertNotNull("Attribute local1 not found", attribute);
assertEquals("Attribute local1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getLocalAttribute("local2");
assertNotNull("Attribute local2 not found", attribute);
assertEquals("Attribute local2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getCascadedAttribute("cascaded1");
assertNotNull("Attribute cascaded1 not found", attribute);
assertEquals("Attribute cascaded1 has not been set correctly",
"value3", attribute.getValue());
attribute = context.getCascadedAttribute("cascaded2");
assertNotNull("Attribute cascaded2 not found", attribute);
assertEquals("Attribute cascaded2 has not been set correctly",
"value4", attribute.getValue());
}
/**
* Tests
* {@link BasicAttributeContext#BasicAttributeContext(BasicAttributeContext)}
* .
*/
@Test
public void testBasicAttributeContextBasicAttributeContext() {
BasicAttributeContext toCopy = new BasicAttributeContext();
toCopy.putAttribute("name1", new Attribute("value1"), false);
toCopy.putAttribute("name2", new Attribute("value2"), true);
Attribute templateAttribute = Attribute
.createTemplateAttribute("/template.jsp");
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
templateAttribute.setRoles(roles);
toCopy.setTemplateAttribute(templateAttribute);
toCopy.setPreparer("my.preparer.Preparer");
AttributeContext context = new BasicAttributeContext(toCopy);
assertEquals("The template has not been set correctly",
"/template.jsp", context.getTemplateAttribute().getValue());
assertEquals("The roles are not the same", roles, context
.getTemplateAttribute().getRoles());
assertEquals("The preparer has not been set correctly",
"my.preparer.Preparer", context.getPreparer());
Attribute attribute = context.getLocalAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
}
/**
* Tests
* {@link BasicAttributeContext#inheritCascadedAttributes(AttributeContext)}
* .
*/
@Test
public void testInheritCascadedAttributes() {
AttributeContext toCopy = new BasicAttributeContext();
toCopy.putAttribute("name1", new Attribute("value1"), false);
toCopy.putAttribute("name2", new Attribute("value2"), true);
AttributeContext context = new BasicAttributeContext();
context.inheritCascadedAttributes(toCopy);
Attribute attribute = context.getLocalAttribute("name1");
assertNull("Attribute name1 found", attribute);
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
}
/**
* Tests {@link BasicAttributeContext#inherit(BasicAttributeContext)}
* testing inheritance between {@link ListAttribute} instances.
*/
@SuppressWarnings("unchecked")
@Test
public void testInheritListAttribute() {
AttributeContext toCopy = new BasicAttributeContext();
ListAttribute parentListAttribute = new ListAttribute();
parentListAttribute.add("first");
toCopy.putAttribute("list", parentListAttribute);
AttributeContext context = new BasicAttributeContext();
ListAttribute listAttribute = new ListAttribute();
listAttribute.setInherit(true);
listAttribute.add("second");
context.putAttribute("list", listAttribute);
context.inherit(toCopy);
ListAttribute result = (ListAttribute) context.getAttribute("list");
assertNotNull("The attribute must exist", result);
List<Object> value = (List<Object>) result.getValue();
assertNotNull("The list must exist", value);
assertEquals("The size is not correct", 2, value.size());
assertEquals("The first element is not correct", "first", value.get(0));
assertEquals("The second element is not correct", "second", value
.get(1));
context = new BasicAttributeContext();
listAttribute = new ListAttribute();
listAttribute.add("second");
context.putAttribute("list", listAttribute);
context.inherit(toCopy);
result = (ListAttribute) context.getAttribute("list");
assertNotNull("The attribute must exist", result);
value = (List<Object>) result.getValue();
assertNotNull("The list must exist", value);
assertEquals("The size is not correct", 1, value.size());
assertEquals("The second element is not correct", "second", value
.get(0));
}
/**
* Tests
* {@link BasicAttributeContext#inheritCascadedAttributes(AttributeContext)}
* .
*/
@Test
public void testInherit() {
AttributeContext toCopy = new BasicAttributeContext();
Attribute parentTemplateAttribute = new Attribute();
parentTemplateAttribute.setValue("/parent/template.jsp");
toCopy.setTemplateAttribute(parentTemplateAttribute);
toCopy.putAttribute("name1", new Attribute("value1"), true);
toCopy.putAttribute("name2", new Attribute("value2"), true);
toCopy.putAttribute("name3", new Attribute("value3"), false);
toCopy.putAttribute("name4", new Attribute("value4"), false);
AttributeContext context = new BasicAttributeContext();
Attribute templateAttribute = new Attribute();
templateAttribute.setRole("role1,role2");
context.setTemplateAttribute(templateAttribute);
context.putAttribute("name1", new Attribute("newValue1"), true);
context.putAttribute("name3", new Attribute("newValue3"), false);
context.inherit(toCopy);
Attribute attribute = context.getTemplateAttribute();
assertEquals("/parent/template.jsp", attribute.getValue());
assertTrue(attribute.getRoles().contains("role1"));
assertTrue(attribute.getRoles().contains("role2"));
attribute = context.getCascadedAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "newValue1",
attribute.getValue());
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getLocalAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "newValue3",
attribute.getValue());
attribute = context.getLocalAttribute("name4");
assertNotNull("Attribute name4 not found", attribute);
assertEquals("Attribute name4 has not been set correctly", "value4",
attribute.getValue());
toCopy = new BasicAttributeContext();
toCopy.putAttribute("name1", new Attribute("value1"), true);
toCopy.putAttribute("name2", new Attribute("value2"), true);
toCopy.putAttribute("name3", new Attribute("value3"), false);
toCopy.putAttribute("name4", new Attribute("value4"), false);
context = new BasicAttributeContext();
context.inherit(toCopy);
attribute = context.getCascadedAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getLocalAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "value3",
attribute.getValue());
attribute = context.getLocalAttribute("name4");
assertNotNull("Attribute name4 not found", attribute);
assertEquals("Attribute name4 has not been set correctly", "value4",
attribute.getValue());
}
/**
* Tests
* {@link BasicAttributeContext#inherit(AttributeContext)}
* .
*/
@Test
public void testInheritAttributeContext() {
AttributeContext toCopy = createMock(AttributeContext.class);
Attribute templateAttribute = Attribute.createTemplateAttribute("/my/template.jsp");
expect(toCopy.getTemplateAttribute()).andReturn(templateAttribute);
expect(toCopy.getPreparer()).andReturn("my.preparer");
Set<String> cascadedNames = new HashSet<String>();
cascadedNames.add("name1");
cascadedNames.add("name2");
expect(toCopy.getCascadedAttributeNames()).andReturn(cascadedNames);
expect(toCopy.getCascadedAttribute("name1")).andReturn(new Attribute("value1"));
expect(toCopy.getCascadedAttribute("name2")).andReturn(new Attribute("value2"));
Set<String> names = new HashSet<String>();
names.add("name3");
names.add("name4");
expect(toCopy.getLocalAttributeNames()).andReturn(names);
expect(toCopy.getLocalAttribute("name3")).andReturn(new Attribute("value3"));
expect(toCopy.getLocalAttribute("name4")).andReturn(new Attribute("value4"));
replay(toCopy);
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("newValue1"), true);
context.putAttribute("name3", new Attribute("newValue3"), false);
context.inherit(toCopy);
Attribute attribute = context.getCascadedAttribute("name1");
assertEquals("/my/template.jsp", context.getTemplateAttribute().getValue());
assertEquals("my.preparer", context.getPreparer());
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "newValue1",
attribute.getValue());
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getLocalAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "newValue3",
attribute.getValue());
attribute = context.getLocalAttribute("name4");
assertNotNull("Attribute name4 not found", attribute);
assertEquals("Attribute name4 has not been set correctly", "value4",
attribute.getValue());
verify(toCopy);
}
/**
* Tests {@link BasicAttributeContext#inherit(AttributeContext)}
* testing inheritance between {@link ListAttribute} instances.
*/
@SuppressWarnings("unchecked")
@Test
public void testInheritAttributeContextListAttribute() {
AttributeContext toCopy = createMock(AttributeContext.class);
Attribute templateAttribute = Attribute.createTemplateAttribute("/my/template.jsp");
expect(toCopy.getTemplateAttribute()).andReturn(templateAttribute).times(2);
expect(toCopy.getPreparer()).andReturn("my.preparer").times(2);
ListAttribute parentListAttribute = new ListAttribute();
parentListAttribute.add("first");
ListAttribute parentListAttribute2 = new ListAttribute();
parentListAttribute2.add("third");
Set<String> names = new HashSet<String>();
names.add("list");
Set<String> cascadedNames = new HashSet<String>();
cascadedNames.add("list2");
expect(toCopy.getCascadedAttributeNames()).andReturn(cascadedNames).times(2);
expect(toCopy.getCascadedAttribute("list2")).andReturn(parentListAttribute2).times(2);
expect(toCopy.getLocalAttributeNames()).andReturn(names).times(2);
expect(toCopy.getLocalAttribute("list")).andReturn(parentListAttribute).times(2);
replay(toCopy);
AttributeContext context = new BasicAttributeContext();
ListAttribute listAttribute = new ListAttribute();
listAttribute.setInherit(true);
listAttribute.add("second");
context.putAttribute("list", listAttribute, false);
ListAttribute listAttribute2 = new ListAttribute();
listAttribute2.setInherit(true);
listAttribute2.add("fourth");
context.putAttribute("list2", listAttribute2, true);
context.inherit(toCopy);
ListAttribute result = (ListAttribute) context.getAttribute("list");
assertNotNull("The attribute must exist", result);
List<Object> value = (List<Object>) result.getValue();
assertNotNull("The list must exist", value);
assertEquals("The size is not correct", 2, value.size());
assertEquals("The first element is not correct", "first", value.get(0));
assertEquals("The second element is not correct", "second", value
.get(1));
result = (ListAttribute) context.getAttribute("list2");
assertNotNull("The attribute must exist", result);
value = (List<Object>) result.getValue();
assertNotNull("The list must exist", value);
assertEquals("The size is not correct", 2, value.size());
assertEquals("The first element is not correct", "third", value.get(0));
assertEquals("The second element is not correct", "fourth", value
.get(1));
context = new BasicAttributeContext();
listAttribute = new ListAttribute();
listAttribute.add("second");
context.putAttribute("list", listAttribute);
context.inherit(toCopy);
result = (ListAttribute) context.getAttribute("list");
assertNotNull("The attribute must exist", result);
value = (List<Object>) result.getValue();
assertNotNull("The list must exist", value);
assertEquals("The size is not correct", 1, value.size());
assertEquals("The second element is not correct", "second", value
.get(0));
verify(toCopy);
}
/**
* Tests {@link BasicAttributeContext#addAll(Map)}.
*/
@Test
public void testAddAll() {
AttributeContext context = new BasicAttributeContext();
Map<String, Attribute> name2attrib = new HashMap<String, Attribute>();
Attribute attribute = new Attribute("Value 1");
name2attrib.put("name1", attribute);
attribute = new Attribute("Value 2");
name2attrib.put("name2", attribute);
context.addAll(name2attrib);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2",
attribute.getValue());
context.addAll(null);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2",
attribute.getValue());
name2attrib = new HashMap<String, Attribute>();
name2attrib.put("name3", new Attribute("Value 3"));
context.addAll(name2attrib);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "Value 3",
attribute.getValue());
}
/**
* Tests {@link BasicAttributeContext#addMissing(Map)}.
*/
@Test
public void testAddMissing() {
Map<String, Attribute> name2attrib = new HashMap<String, Attribute>();
Attribute attribute = new Attribute("Value 1");
name2attrib.put("name1", attribute);
attribute = new Attribute("Value 2");
name2attrib.put("name2", attribute);
AttributeContext context = new BasicAttributeContext(name2attrib);
name2attrib.remove("name2");
name2attrib.put("name1", new Attribute("Value 1a"));
name2attrib.put("name3", new Attribute("Value 3"));
context.addMissing(name2attrib);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "Value 3",
attribute.getValue());
context.addMissing(null);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "Value 3",
attribute.getValue());
context = new BasicAttributeContext();
name2attrib = new HashMap<String, Attribute>();
name2attrib.put("name1", new Attribute("Value 1a"));
name2attrib.put("name3", new Attribute("Value 3"));
context.addMissing(name2attrib);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1a",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "Value 3",
attribute.getValue());
context = new BasicAttributeContext();
context.putAttribute("name2", new Attribute("Value 2a"), true);
name2attrib = new HashMap<String, Attribute>();
name2attrib.put("name1", new Attribute("Value 1a"));
name2attrib.put("name3", new Attribute("Value 3"));
context.addMissing(name2attrib);
attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "Value 1a",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2a",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "Value 3",
attribute.getValue());
context = new BasicAttributeContext();
context.putAttribute("name2", new Attribute("Value 2a"), true);
name2attrib = new HashMap<String, Attribute>();
name2attrib.put("name2", new Attribute("Value 2b"));
name2attrib.put("name3", new Attribute("Value 3"));
context.addMissing(name2attrib);
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "Value 2a",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "Value 3",
attribute.getValue());
}
/**
* Tests {@link BasicAttributeContext#getAttribute(String)}.
*/
@Test
public void testGetAttribute() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
context.putAttribute("name3", new Attribute("value3a"), true);
context.putAttribute("name3", new Attribute("value3"), false);
Attribute attribute = context.getAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "value3",
attribute.getValue());
}
/**
* Tests {@link BasicAttributeContext#getLocalAttribute(String)}.
*/
@Test
public void testGetLocalAttribute() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
context.putAttribute("name3", new Attribute("value3a"), true);
context.putAttribute("name3", new Attribute("value3"), false);
Attribute attribute = context.getLocalAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getLocalAttribute("name2");
assertNull("Attribute name2 found", attribute);
attribute = context.getLocalAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "value3",
attribute.getValue());
}
/**
* Tests {@link BasicAttributeContext#getCascadedAttribute(String)}.
*/
@Test
public void testGetCascadedAttribute() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
context.putAttribute("name3", new Attribute("value3a"), true);
context.putAttribute("name3", new Attribute("value3"), false);
Attribute attribute = context.getCascadedAttribute("name1");
assertNull("Attribute name1 found", attribute);
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getCascadedAttribute("name3");
assertNotNull("Attribute name3 not found", attribute);
assertEquals("Attribute name3 has not been set correctly", "value3a",
attribute.getValue());
}
/**
* Tests {@link BasicAttributeContext#getLocalAttributeNames()}.
*/
@Test
public void testGetLocalAttributeNames() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
context.putAttribute("name3", new Attribute("value3a"), true);
context.putAttribute("name3", new Attribute("value3"), false);
Set<String> names = context.getLocalAttributeNames();
assertTrue("Attribute name1 is not present", names.contains("name1"));
assertFalse("Attribute name2 is present", names.contains("name2"));
assertTrue("Attribute name3 is not present", names.contains("name3"));
}
/**
* Tests {@link BasicAttributeContext#getCascadedAttributeNames()}.
*/
@Test
public void testGetCascadedAttributeNames() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
context.putAttribute("name3", new Attribute("value3a"), true);
context.putAttribute("name3", new Attribute("value3"), false);
Set<String> names = context.getCascadedAttributeNames();
assertFalse("Attribute name1 is present", names.contains("name1"));
assertTrue("Attribute name2 is not present", names.contains("name2"));
assertTrue("Attribute name3 is not present", names.contains("name3"));
}
/**
* Tests {@link BasicAttributeContext#putAttribute(String, Attribute)}.
*/
@Test
public void testPutAttributeStringAttribute() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"));
Attribute attribute = context.getLocalAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getCascadedAttribute("name1");
assertNull("Attribute name1 found", attribute);
}
/**
* Tests
* {@link BasicAttributeContext#putAttribute(String, Attribute, boolean)}.
*/
@Test
public void testPutAttributeStringAttributeBoolean() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
Attribute attribute = context.getLocalAttribute("name1");
assertNotNull("Attribute name1 not found", attribute);
assertEquals("Attribute name1 has not been set correctly", "value1",
attribute.getValue());
attribute = context.getCascadedAttribute("name1");
assertNull("Attribute name1 found", attribute);
attribute = context.getCascadedAttribute("name2");
assertNotNull("Attribute name2 not found", attribute);
assertEquals("Attribute name2 has not been set correctly", "value2",
attribute.getValue());
attribute = context.getLocalAttribute("name2");
assertNull("Attribute name2 found", attribute);
}
/**
* Tests {@link BasicAttributeContext#clear()}.
*/
@Test
public void testClear() {
AttributeContext context = new BasicAttributeContext();
context.putAttribute("name1", new Attribute("value1"), false);
context.putAttribute("name2", new Attribute("value2"), true);
context.clear();
Set<String> names = context.getLocalAttributeNames();
assertTrue("There are local attributes", names == null
|| names.isEmpty());
names = context.getCascadedAttributeNames();
assertTrue("There are cascaded attributes", names == null
|| names.isEmpty());
}
/**
* Tests {@link BasicAttributeContext#equals(Object)}.
*/
@Test
public void testEquals() {
BasicAttributeContext attributeContext = new BasicAttributeContext();
attributeContext.setPreparer("my.preparer");
attributeContext.setTemplateAttribute(Attribute.createTemplateAttribute("/my/template.jsp"));
attributeContext.putAttribute("attribute1", new Attribute("value1"), true);
attributeContext.putAttribute("attribute2", new Attribute("value2"), true);
attributeContext.putAttribute("attribute3", new Attribute("value3"), false);
BasicAttributeContext toCompare = new BasicAttributeContext(attributeContext);
assertTrue(toCompare.equals(attributeContext));
toCompare = new BasicAttributeContext(attributeContext);
toCompare.putAttribute("attribute4", new Attribute("value4"), true);
assertFalse(toCompare.equals(attributeContext));
toCompare = new BasicAttributeContext(attributeContext);
toCompare.putAttribute("attribute4", new Attribute("value4"), false);
assertFalse(toCompare.equals(attributeContext));
toCompare = new BasicAttributeContext(attributeContext);
toCompare.setPreparer("another.preparer");
assertFalse(toCompare.equals(attributeContext));
toCompare = new BasicAttributeContext(attributeContext);
toCompare.setTemplateAttribute(Attribute.createTemplateAttribute("/another/template.jsp"));
assertFalse(toCompare.equals(attributeContext));
}
/**
* Tests {@link BasicAttributeContext#hashCode()}.
*/
@Test
public void testHashCode() {
BasicAttributeContext attributeContext = new BasicAttributeContext();
attributeContext.setPreparer("my.preparer");
Attribute templateAttribute = Attribute.createTemplateAttribute("/my/template.jsp");
attributeContext.setTemplateAttribute(templateAttribute);
Attribute attribute1 = new Attribute("value1");
Attribute attribute2 = new Attribute("value2");
Attribute attribute3 = new Attribute("value3");
attributeContext.putAttribute("attribute1", attribute1, true);
attributeContext.putAttribute("attribute2", attribute2, true);
attributeContext.putAttribute("attribute3", attribute3, false);
Map<String, Attribute> cascadedAttributes = new HashMap<String, Attribute>();
cascadedAttributes.put("attribute1", attribute1);
cascadedAttributes.put("attribute2", attribute2);
Map<String, Attribute> attributes = new HashMap<String, Attribute>();
attributes.put("attribute3", attribute3);
assertEquals(templateAttribute.hashCode() + "my.preparer".hashCode()
+ attributes.hashCode() + cascadedAttributes.hashCode(),
attributeContext.hashCode());
}
/**
* Tests {@link BasicAttributeContext} for the TILES-429 bug.
*/
@Test
public void testTiles429() {
AttributeContext toCopy = new BasicAttributeContext();
toCopy.putAttribute("name1", new Attribute("value1"), false);
toCopy.putAttribute("name2", new Attribute("value2"), true);
List<Object> listOfObjects = new ArrayList<Object>();
listOfObjects.add(1);
ListAttribute listAttribute = new ListAttribute(listOfObjects);
listAttribute.setInherit(true);
toCopy.putAttribute("name3", listAttribute);
Attribute templateAttribute = Attribute
.createTemplateAttribute("/template.jsp");
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
templateAttribute.setRoles(roles);
toCopy.setTemplateAttribute(templateAttribute);
toCopy.setPreparer("my.preparer.Preparer");
AttributeContext context = new BasicAttributeContext(toCopy);
Attribute attribute = context.getAttribute("name1");
attribute.setValue("newValue1");
attribute = context.getAttribute("name1");
assertEquals("newValue1", attribute.getValue());
attribute = toCopy.getAttribute("name1");
assertEquals("value1", attribute.getValue());
attribute = context.getAttribute("name3");
assertTrue(attribute instanceof ListAttribute);
assertTrue(((ListAttribute) attribute).isInherit());
}
}