BasicAttributeContext implements AttributeContext, Serializable { public Set<String> getLocalAttributeNames() { if (attributes != null && !attributes.isEmpty()) { return attributes.keySet(); } return null; } BasicAttributeContext();  BasicAttributeContext(Map<String, Attribute> attributes);  BasicAttributeContext(AttributeContext context);  BasicAttributeContext(BasicAttributeContext context); Attribute getTemplateAttribute(); void setTemplateAttribute(Attribute templateAttribute); String getPreparer(); void setPreparer(String url); void inheritCascadedAttributes(AttributeContext context); void inherit(AttributeContext parent); void inherit(BasicAttributeContext parent); void addAll(Map<String, Attribute> newAttributes); void addMissing(Map<String, Attribute> defaultAttributes); Attribute getAttribute(String name); Attribute getLocalAttribute(String name); Attribute getCascadedAttribute(String name); Set<String> getLocalAttributeNames(); Set<String> getCascadedAttributeNames(); void putAttribute(String name, Attribute value); void putAttribute(String name, Attribute value, boolean cascade); void clear(); @Override boolean equals(Object obj); @Override int hashCode();  }
@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")); }