blob: 68105f31518d5cd4d4eeea4d9b3fcc709d9af546 [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.apache.tiles.CompareUtil.*;
import static org.easymock.EasyMock.*;
import static org.easymock.classextension.EasyMock.*;
import static org.junit.Assert.*;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.tiles.request.Request;
import org.junit.Test;
/**
* Tests {@link Attribute}.
*
* @version $Rev$ $Date$
*/
public class AttributeTest {
/**
* Tests {@link Attribute#createTemplateAttribute(String)}.
*/
@Test
public void testCreateTemplateAttribute1() {
Attribute attribute = Attribute.createTemplateAttribute("/my/template.jsp");
assertEquals("/my/template.jsp", attribute.getValue());
assertEquals("template", attribute.getRenderer());
}
/**
* Tests {@link Attribute#createTemplateAttributeWithExpression(String)}.
*/
@Test
public void testCreateTemplateAttribute2() {
Attribute attribute = Attribute.createTemplateAttributeWithExpression("my.expression");
assertEquals("template", attribute.getRenderer());
assertEquals("my.expression", attribute.getExpressionObject().getExpression());
assertNull(attribute.getExpressionObject().getLanguage());
}
/**
* Tests {@link Attribute#Attribute()}.
*/
@Test
public void testAttribute() {
Attribute attribute = new Attribute();
assertNull(attribute.getValue());
}
/**
* Tests {@link Attribute#Attribute(Object)}.
*/
@Test
public void testAttributeObject() {
Attribute attribute = new Attribute("my.value");
assertEquals("my.value", attribute.getValue());
assertNull(attribute.getRenderer());
}
/**
* Tests {@link Attribute#Attribute(Object, String)}.
*/
@Test
public void testAttributeObjectString() {
Attribute attribute = new Attribute("my.value", "role1,role2");
assertEquals("my.value", attribute.getValue());
assertNull(attribute.getRenderer());
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals(roles, attribute.getRoles());
}
/**
* Tests {@link Attribute#Attribute(Object, Expression, String, String)}.
*/
@Test
public void testAttributeComplete() {
Expression expression = new Expression("my.expression", "MYLANG");
Attribute attribute = new Attribute("my.value", expression, "role1,role2", "myrenderer");
assertEquals("my.value", attribute.getValue());
assertEquals("myrenderer", attribute.getRenderer());
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals(roles, attribute.getRoles());
assertEquals("my.expression", attribute.getExpressionObject().getExpression());
assertEquals("MYLANG", attribute.getExpressionObject().getLanguage());
}
/**
* Tests {@link Attribute#Attribute(Attribute)}.
*/
@Test
public void testAttributeCopy() {
Expression expression = new Expression("my.expression", "MYLANG");
Attribute attribute = new Attribute("my.value", expression, "role1,role2", "myrenderer");
attribute = new Attribute(attribute);
assertEquals("my.value", attribute.getValue());
assertEquals("myrenderer", attribute.getRenderer());
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals(roles, attribute.getRoles());
assertEquals("my.expression", attribute.getExpressionObject().getExpression());
assertEquals("MYLANG", attribute.getExpressionObject().getLanguage());
attribute = new Attribute("my.value", null, "role1,role2", "myrenderer");
attribute = new Attribute(attribute);
assertEquals("my.value", attribute.getValue());
assertEquals("myrenderer", attribute.getRenderer());
roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals(roles, attribute.getRoles());
assertNull(attribute.getExpressionObject());
}
/**
* Tests {@link Attribute#equals(Object)}.
*/
@Test
public void testEquals() {
Expression expression = new Expression("my.expression", "MYLANG");
Attribute attribute = new Attribute("my.value", expression, "role1,role2", "myrenderer");
Attribute attribute2 = new Attribute(attribute);
assertTrue(attribute.equals(attribute2));
attribute2.setRenderer("anotherRenderer");
assertFalse(attribute.equals(attribute2));
attribute2 = new Attribute(attribute);
attribute2.setRole("otherrole");
assertFalse(attribute.equals(attribute2));
attribute2 = new Attribute(attribute);
attribute2.setExpressionObject(new Expression("another.expression", "MYLANG"));
assertFalse(attribute.equals(attribute2));
attribute2 = new Attribute(attribute);
attribute2.setValue("anothervalue");
assertFalse(attribute.equals(attribute2));
}
/**
* Tests {@link Attribute#getRole()} and {@link Attribute#setRole(String)}.
*/
@Test
public void testGetRole() {
Attribute attribute = new Attribute("my.value");
assertNull(attribute.getRole());
Set<String> roles = new LinkedHashSet<String>();
attribute.setRoles(roles);
assertNull(attribute.getRole());
roles.add("role1");
roles.add("role2");
assertEquals("role1,role2", attribute.getRole());
}
/**
* Tests {@link Attribute#hashCode()}.
*/
@Test
public void testHashCode() {
Expression expression = new Expression("my.expression", "MYLANG");
Attribute attribute = new Attribute("my.value", expression, "role1,role2", "myrenderer");
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals(nullSafeHashCode("my.value")
+ nullSafeHashCode(expression) + nullSafeHashCode(roles)
+ nullSafeHashCode("myrenderer"), attribute.hashCode());
}
/**
* Tests {@link Attribute#toString()}.
*/
@Test
public void testToString() {
Expression expression = new Expression("my.expression", "MYLANG");
Attribute attribute = new Attribute("my.value", expression, "role1,role2", "myrenderer");
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals("my.value", attribute.toString());
attribute.setValue(null);
assertNull(attribute.toString());
}
/**
* Test method for {@link org.apache.tiles.Attribute#inherit(org.apache.tiles.Attribute)}.
*/
@Test
public void testInherit() {
Attribute attribute = new Attribute(null, (Expression) null, null, (String) null);
Attribute parentAttribute = new Attribute("value", Expression
.createExpression("expression", "language"), "role", "renderer");
attribute.inherit(parentAttribute);
assertEquals("value", attribute.getValue());
assertEquals("expression", attribute.getExpressionObject().getExpression());
assertEquals("language", attribute.getExpressionObject().getLanguage());
assertEquals("role", attribute.getRole());
assertEquals("renderer", attribute.getRenderer());
Expression expression = new Expression(null, "MYLANG");
attribute = new Attribute(null, expression, null, (String) null);
attribute.setRoles(new HashSet<String>());
attribute.inherit(parentAttribute);
assertEquals("value", attribute.getValue());
assertEquals("expression", attribute.getExpressionObject().getExpression());
assertEquals("language", attribute.getExpressionObject().getLanguage());
assertEquals("role", attribute.getRole());
assertEquals("renderer", attribute.getRenderer());
}
/**
* Tests {@link Attribute#clone()}.
*/
@Test
public void testClone() {
Expression expression = new Expression("my.expression", "MYLANG");
Attribute attribute = new Attribute("my.value", expression, "role1,role2", "myrenderer");
attribute = attribute.clone();
assertEquals("my.value", attribute.getValue());
assertEquals("myrenderer", attribute.getRenderer());
Set<String> roles = new HashSet<String>();
roles.add("role1");
roles.add("role2");
assertEquals(roles, attribute.getRoles());
assertEquals("my.expression", attribute.getExpressionObject().getExpression());
assertEquals("MYLANG", attribute.getExpressionObject().getLanguage());
}
/**
* Tests {@link Attribute#createTemplateAttribute(String, String, String, String)}.
*/
@Test
public void testCreateTemplateAttribute() {
Attribute attribute = Attribute.createTemplateAttribute("myTemplate",
"MYLANG:myExpression", "myType", "myRole");
assertEquals("myTemplate", attribute.getValue());
assertEquals("MYLANG", attribute.getExpressionObject().getLanguage());
assertEquals("myExpression", attribute.getExpressionObject().getExpression());
assertEquals("myType", attribute.getRenderer());
Set<String> roles = attribute.getRoles();
assertEquals(1, roles.size());
assertTrue(roles.contains("myRole"));
}
/**
* Tests {@link Attribute#isPermitted(Request)}.
*/
@Test
public void testIsPermitted() {
Attribute attribute = new Attribute("myvalue");
Request requestContext = createMock(Request.class);
expect(requestContext.isUserInRole("first")).andReturn(Boolean.TRUE)
.anyTimes();
expect(requestContext.isUserInRole("second")).andReturn(Boolean.FALSE)
.anyTimes();
replay(requestContext);
assertTrue(attribute.isPermitted(requestContext));
Set<String> roles = new HashSet<String>();
roles.add("first");
attribute.setRoles(roles);
assertTrue("The role is not permitted", attribute.isPermitted(
requestContext));
roles.clear();
roles.add("second");
assertFalse("The role is not permitted", attribute.isPermitted(
requestContext));
verify(requestContext);
}
}