@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());
}