/******************************************************************************* * Copyright (c) 2007, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsp.core.tests.contentmodels; import junit.framework.TestCase; import org.eclipse.jst.jsp.core.internal.contentmodel.JSPCMDocumentFactory; import org.eclipse.wst.html.core.internal.contentmodel.JSP11Namespace; import org.eclipse.wst.html.core.internal.contentmodel.JSP20Namespace; import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration; import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap; import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType; public class TestFixedCMDocuments extends TestCase { public TestFixedCMDocuments(String name) { super(name); } /** * @param cm_doc_type * @param elementName * @param attrNameImport */ private void checkAttrNames(String documentKey, String elementName, String[] attrNames) { CMDocument document = JSPCMDocumentFactory.getCMDocument(documentKey); CMNode elementDeclaration = document.getElements().getNamedItem(elementName); assertEquals("not an element declaration:" + elementDeclaration, CMNode.ELEMENT_DECLARATION, elementDeclaration.getNodeType()); assertNotNull("missing element declaration:" + elementName, elementDeclaration); CMNamedNodeMap attributes = ((CMElementDeclaration) elementDeclaration).getAttributes(); for (int i = 0; i < attrNames.length; i++) { assertNotNull("missing attribute declaration:" + attrNames[i], attributes.getNamedItem(attrNames[i])); } assertEquals("Attributes defined in content model that are not expected by the test", attributes.getLength(), attrNames.length); } private void checkDocument(Object documentKey) { CMDocument document = JSPCMDocumentFactory.getCMDocument(documentKey.toString()); assertNotNull("missing doc:" + documentKey.toString(), document); CMNamedNodeMap elements = document.getElements(); for (int i = 0; i < elements.getLength(); i++) { CMNode item = elements.item(i); verifyElementDeclarationHasName(item); } } public void testAttributesOnJSP11Forward() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.FORWARD, new String[]{JSP11Namespace.ATTR_NAME_PAGE}); } public void testAttributesOnJSP11GetProperty() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.GETPROPERTY, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_PROPERTY}); } public void testAttributesOnJSP11Include() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.INCLUDE, new String[]{JSP11Namespace.ATTR_NAME_PAGE, JSP11Namespace.ATTR_NAME_FLUSH}); } public void testAttributesOnJSP11IncludeDirective() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_INCLUDE, new String[]{JSP11Namespace.ATTR_NAME_FILE}); } public void testAttributesOnJSP11PageDirective() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_PAGE, new String[]{JSP11Namespace.ATTR_NAME_LANGUAGE, JSP11Namespace.ATTR_NAME_EXTENDS, JSP11Namespace.ATTR_NAME_IMPORT, JSP11Namespace.ATTR_NAME_SESSION, JSP11Namespace.ATTR_NAME_BUFFER, JSP11Namespace.ATTR_NAME_AUTOFLUSH, JSP11Namespace.ATTR_NAME_IS_THREAD_SAFE, JSP11Namespace.ATTR_NAME_INFO, JSP11Namespace.ATTR_NAME_ERROR_PAGE, JSP11Namespace.ATTR_NAME_IS_ERROR_PAGE, JSP11Namespace.ATTR_NAME_CONTENT_TYPE, JSP11Namespace.ATTR_NAME_PAGE_ENCODING}); } public void testAttributesOnJSP11Param() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.PARAM, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_VALUE}); } public void testAttributesOnJSP11Plugin() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.PLUGIN, new String[]{JSP11Namespace.ATTR_NAME_TYPE, JSP11Namespace.ATTR_NAME_CODE, JSP11Namespace.ATTR_NAME_CODEBASE, JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_ARCHIVE, JSP11Namespace.ATTR_NAME_ALIGN, JSP11Namespace.ATTR_NAME_HEIGHT, JSP11Namespace.ATTR_NAME_WIDTH, JSP11Namespace.ATTR_NAME_HSPACE, JSP11Namespace.ATTR_NAME_VSPACE, JSP11Namespace.ATTR_NAME_JREVERSION, JSP11Namespace.ATTR_NAME_NSPLUGINURL, JSP11Namespace.ATTR_NAME_IEPLUGINURL}); } public void testAttributesOnJSP11Root() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.ROOT, new String[]{JSP11Namespace.ATTR_NAME_XMLNS_JSP, JSP11Namespace.ATTR_NAME_VERSION}); } // public void testAttributesOnJSP21PageDirective() { // checkAttrNames(CMDocType.JSP21_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_PAGE, new String[]{JSP11Namespace.ATTR_NAME_LANGUAGE, JSP11Namespace.ATTR_NAME_EXTENDS, JSP11Namespace.ATTR_NAME_IMPORT, JSP11Namespace.ATTR_NAME_SESSION, JSP11Namespace.ATTR_NAME_BUFFER, JSP11Namespace.ATTR_NAME_AUTOFLUSH, JSP11Namespace.ATTR_NAME_IS_THREAD_SAFE, JSP11Namespace.ATTR_NAME_INFO, JSP11Namespace.ATTR_NAME_ERROR_PAGE, JSP11Namespace.ATTR_NAME_IS_ERROR_PAGE, JSP11Namespace.ATTR_NAME_CONTENT_TYPE, JSP11Namespace.ATTR_NAME_PAGE_ENCODING, JSP20Namespace.ATTR_NAME_DEFERRED_SYNTAX_ALLOWED_AS_LITERAL, JSP20Namespace.ATTR_NAME_TRIM_DIRECTIVE_WHITESPACES, JSP20Namespace.ATTR_NAME_ISELIGNORED}); // } public void testAttributesOnJSP11SetProperty() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.SETPROPERTY, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_PROPERTY, JSP11Namespace.ATTR_NAME_PARAM, JSP11Namespace.ATTR_NAME_VALUE}); } public void testAttributesOnJSP11TaglibDirective() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_TAGLIB, new String[]{JSP11Namespace.ATTR_NAME_URI, JSP11Namespace.ATTR_NAME_PREFIX}); } public void testAttributesOnJSP11UseBean() { checkAttrNames(CMDocType.JSP11_DOC_TYPE, JSP11Namespace.ElementName.USEBEAN, new String[]{JSP11Namespace.ATTR_NAME_ID, JSP11Namespace.ATTR_NAME_SCOPE, JSP11Namespace.ATTR_NAME_CLASS, JSP11Namespace.ATTR_NAME_TYPE, JSP11Namespace.ATTR_NAME_BEAN_NAME}); } public void testAttributesOnJSP20Attribute() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP20Namespace.ElementName.ATTRIBUTE, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP20Namespace.ATTR_NAME_TRIM}); } public void testAttributesOnJSP20Element() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP20Namespace.ElementName.ELEMENT, new String[]{JSP11Namespace.ATTR_NAME_NAME}); } public void testAttributesOnJSP20Forward() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.FORWARD, new String[]{JSP11Namespace.ATTR_NAME_PAGE}); } public void testAttributesOnJSP20GetProperty() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.GETPROPERTY, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_PROPERTY}); } // JSP 2.1 attributes on tag directives // public void testAttributesOnTAG21TagDirective() { // checkAttrNames(CMDocType.TAG21_DOC_TYPE, JSP20Namespace.ElementName.DIRECTIVE_TAG, new String[]{JSP20Namespace.ATTR_NAME_DISPLAY_NAME, JSP20Namespace.ATTR_NAME_BODY_CONTENT, JSP20Namespace.ATTR_NAME_DYNAMIC_ATTRIBUTES, JSP20Namespace.ATTR_NAME_SMALL_ICON, JSP20Namespace.ATTR_NAME_LARGE_ICON, JSP20Namespace.ATTR_NAME_DESCRIPTION, JSP20Namespace.ATTR_NAME_EXAMPLE, JSP20Namespace.ATTR_NAME_LANGUAGE, JSP11Namespace.ATTR_NAME_IMPORT, JSP11Namespace.ATTR_NAME_PAGE_ENCODING, JSP20Namespace.ATTR_NAME_ISELIGNORED, JSP20Namespace.ATTR_NAME_DEFERRED_SYNTAX_ALLOWED_AS_LITERAL, JSP20Namespace.ATTR_NAME_TRIM_DIRECTIVE_WHITESPACES}); // } public void testAttributesOnJSP20Include() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.INCLUDE, new String[]{JSP11Namespace.ATTR_NAME_PAGE, JSP11Namespace.ATTR_NAME_FLUSH}); } public void testAttributesOnJSP20IncludeDirective() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_INCLUDE, new String[]{JSP11Namespace.ATTR_NAME_FILE}); } public void testAttributesOnJSP20Output() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP20Namespace.ElementName.OUTPUT, new String[]{JSP20Namespace.ATTR_NAME_OMIT_XML_DECL, JSP20Namespace.ATTR_NAME_DOCTYPE_PUBLIC, JSP20Namespace.ATTR_NAME_DOCTYPE_ROOT_ELEMENT, JSP20Namespace.ATTR_NAME_DOCTYPE_SYSTEM}); } public void testAttributesOnJSP20PageDirective() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_PAGE, new String[]{JSP11Namespace.ATTR_NAME_LANGUAGE, JSP11Namespace.ATTR_NAME_EXTENDS, JSP11Namespace.ATTR_NAME_IMPORT, JSP11Namespace.ATTR_NAME_SESSION, JSP11Namespace.ATTR_NAME_BUFFER, JSP11Namespace.ATTR_NAME_AUTOFLUSH, JSP11Namespace.ATTR_NAME_IS_THREAD_SAFE, JSP11Namespace.ATTR_NAME_INFO, JSP11Namespace.ATTR_NAME_ERROR_PAGE, JSP11Namespace.ATTR_NAME_IS_ERROR_PAGE, JSP11Namespace.ATTR_NAME_CONTENT_TYPE, JSP11Namespace.ATTR_NAME_PAGE_ENCODING, JSP20Namespace.ATTR_NAME_ISELIGNORED}); } public void testAttributesOnJSP20Param() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.PARAM, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_VALUE}); } public void testAttributesOnJSP20Plugin() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.PLUGIN, new String[]{JSP11Namespace.ATTR_NAME_TYPE, JSP11Namespace.ATTR_NAME_CODE, JSP11Namespace.ATTR_NAME_CODEBASE, JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_ARCHIVE, JSP11Namespace.ATTR_NAME_ALIGN, JSP11Namespace.ATTR_NAME_HEIGHT, JSP11Namespace.ATTR_NAME_WIDTH, JSP11Namespace.ATTR_NAME_HSPACE, JSP11Namespace.ATTR_NAME_VSPACE, JSP11Namespace.ATTR_NAME_JREVERSION, JSP11Namespace.ATTR_NAME_NSPLUGINURL, JSP11Namespace.ATTR_NAME_IEPLUGINURL, JSP20Namespace.ATTR_NAME_MAYSCRIPT}); } public void testAttributesOnJSP20Root() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.ROOT, new String[]{JSP11Namespace.ATTR_NAME_XMLNS_JSP, JSP11Namespace.ATTR_NAME_VERSION}); } public void testAttributesOnJSP20SetProperty() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.SETPROPERTY, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_PROPERTY, JSP11Namespace.ATTR_NAME_PARAM, JSP11Namespace.ATTR_NAME_VALUE}); } public void testAttributesOnJSP20TaglibDirective() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_TAGLIB, new String[]{JSP11Namespace.ATTR_NAME_URI, JSP11Namespace.ATTR_NAME_PREFIX, JSP20Namespace.ATTR_NAME_TAGDIR}); } public void testAttributesOnJSP20UseBean() { checkAttrNames(CMDocType.JSP20_DOC_TYPE, JSP11Namespace.ElementName.USEBEAN, new String[]{JSP11Namespace.ATTR_NAME_ID, JSP11Namespace.ATTR_NAME_SCOPE, JSP11Namespace.ATTR_NAME_CLASS, JSP11Namespace.ATTR_NAME_TYPE, JSP11Namespace.ATTR_NAME_BEAN_NAME}); } public void testAttributesOnTAG20Attribute() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.ATTRIBUTE, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP20Namespace.ATTR_NAME_TRIM}); } public void testAttributesOnTAG20AttributeDirective() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.DIRECTIVE_ATTRIBUTE, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP20Namespace.ATTR_NAME_REQUIRED, JSP20Namespace.ATTR_NAME_FRAGMENT, JSP20Namespace.ATTR_NAME_RTEXPRVALUE, JSP20Namespace.ATTR_NAME_TYPE, JSP20Namespace.ATTR_NAME_DESCRIPTION}); } public void testAttributesOnTAG20DoBody() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.DOBODY, new String[]{JSP20Namespace.ATTR_NAME_VAR, JSP20Namespace.ATTR_NAME_VARREADER, JSP11Namespace.ATTR_NAME_SCOPE}); } public void testAttributesOnTAG20Element() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.ELEMENT, new String[]{JSP11Namespace.ATTR_NAME_NAME}); } public void testAttributesOnTAG20Forward() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.FORWARD, new String[]{JSP11Namespace.ATTR_NAME_PAGE}); } public void testAttributesOnTAG20GetProperty() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.GETPROPERTY, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_PROPERTY}); } public void testAttributesOnTAG20Include() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.INCLUDE, new String[]{JSP11Namespace.ATTR_NAME_PAGE, JSP11Namespace.ATTR_NAME_FLUSH}); } public void testAttributesOnTAG20IncludeDirective() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_INCLUDE, new String[]{JSP11Namespace.ATTR_NAME_FILE}); } public void testAttributesOnTAG20Invoke() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.INVOKE, new String[]{JSP20Namespace.ATTR_NAME_FRAGMENT, JSP20Namespace.ATTR_NAME_VAR, JSP20Namespace.ATTR_NAME_VARREADER, JSP11Namespace.ATTR_NAME_SCOPE}); } public void testAttributesOnTAG20Output() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.OUTPUT, new String[]{JSP20Namespace.ATTR_NAME_OMIT_XML_DECL, JSP20Namespace.ATTR_NAME_DOCTYPE_PUBLIC, JSP20Namespace.ATTR_NAME_DOCTYPE_ROOT_ELEMENT, JSP20Namespace.ATTR_NAME_DOCTYPE_SYSTEM}); } public void testAttributesOnTAG20Param() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.PARAM, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_VALUE}); } public void testAttributesOnTAG20Plugin() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.PLUGIN, new String[]{JSP11Namespace.ATTR_NAME_TYPE, JSP11Namespace.ATTR_NAME_CODE, JSP11Namespace.ATTR_NAME_CODEBASE, JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_ARCHIVE, JSP11Namespace.ATTR_NAME_ALIGN, JSP11Namespace.ATTR_NAME_HEIGHT, JSP11Namespace.ATTR_NAME_WIDTH, JSP11Namespace.ATTR_NAME_HSPACE, JSP11Namespace.ATTR_NAME_VSPACE, JSP11Namespace.ATTR_NAME_JREVERSION, JSP11Namespace.ATTR_NAME_NSPLUGINURL, JSP11Namespace.ATTR_NAME_IEPLUGINURL, JSP20Namespace.ATTR_NAME_MAYSCRIPT}); } public void testAttributesOnTAG20Root() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.ROOT, new String[]{JSP11Namespace.ATTR_NAME_XMLNS_JSP, JSP11Namespace.ATTR_NAME_VERSION}); } public void testAttributesOnTAG20SetProperty() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.SETPROPERTY, new String[]{JSP11Namespace.ATTR_NAME_NAME, JSP11Namespace.ATTR_NAME_PROPERTY, JSP11Namespace.ATTR_NAME_PARAM, JSP11Namespace.ATTR_NAME_VALUE}); } public void testAttributesOnTAG20TagDirective() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.DIRECTIVE_TAG, new String[]{JSP20Namespace.ATTR_NAME_DISPLAY_NAME, JSP20Namespace.ATTR_NAME_BODY_CONTENT, JSP20Namespace.ATTR_NAME_DYNAMIC_ATTRIBUTES, JSP20Namespace.ATTR_NAME_SMALL_ICON, JSP20Namespace.ATTR_NAME_LARGE_ICON, JSP20Namespace.ATTR_NAME_DESCRIPTION, JSP20Namespace.ATTR_NAME_EXAMPLE, JSP20Namespace.ATTR_NAME_LANGUAGE, JSP11Namespace.ATTR_NAME_IMPORT, JSP11Namespace.ATTR_NAME_PAGE_ENCODING, JSP20Namespace.ATTR_NAME_ISELIGNORED}); } public void testAttributesOnTAG20TaglibDirective() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.DIRECTIVE_TAGLIB, new String[]{JSP11Namespace.ATTR_NAME_URI, JSP11Namespace.ATTR_NAME_PREFIX, JSP20Namespace.ATTR_NAME_TAGDIR}); } public void testAttributesOnTAG20UseBean() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP11Namespace.ElementName.USEBEAN, new String[]{JSP11Namespace.ATTR_NAME_ID, JSP11Namespace.ATTR_NAME_SCOPE, JSP11Namespace.ATTR_NAME_CLASS, JSP11Namespace.ATTR_NAME_TYPE, JSP11Namespace.ATTR_NAME_BEAN_NAME}); } public void testAttributesOnTAG20VariableDirective() { checkAttrNames(CMDocType.TAG20_DOC_TYPE, JSP20Namespace.ElementName.DIRECTIVE_VARIABLE, new String[]{JSP20Namespace.ATTR_NAME_NAME_GIVEN, JSP20Namespace.ATTR_NAME_NAME_FROM_ATTRIBUTE, JSP20Namespace.ATTR_NAME_ALIAS, JSP20Namespace.ATTR_NAME_VARIABLE_CLASS, JSP20Namespace.ATTR_NAME_DECLARE, JSP11Namespace.ATTR_NAME_SCOPE, JSP20Namespace.ATTR_NAME_DESCRIPTION}); } public void testCHTMLdocument() { checkDocument(CMDocType.CHTML_DOC_TYPE); } public void testHTML4document() { checkDocument(CMDocType.HTML_DOC_TYPE); } public void testJSP11document() { checkDocument(CMDocType.JSP11_DOC_TYPE); } public void testJSP12document() { checkDocument(CMDocType.JSP12_DOC_TYPE); } public void testJSP20document() { checkDocument(CMDocType.JSP20_DOC_TYPE); } public void testTag20document() { checkDocument(CMDocType.TAG20_DOC_TYPE); } private void verifyAttributeDeclaration(CMElementDeclaration elemDecl, CMNode attr) { assertTrue(attr.getNodeType() == CMNode.ATTRIBUTE_DECLARATION); assertNotNull("no name on an attribute declaration", attr.getNodeName()); CMAttributeDeclaration attrDecl = (CMAttributeDeclaration) attr; assertNotNull("no attribute 'type' on an attribute declaration " + elemDecl.getNodeName() + "/" + attr.getNodeName(), attrDecl.getAttrType()); } private void verifyElementDeclarationHasName(CMNode item) { assertTrue(item.getNodeType() == CMNode.ELEMENT_DECLARATION); assertNotNull("no name on an element declaration", item.getNodeName()); CMNamedNodeMap attrs = ((CMElementDeclaration) item).getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { CMNode attr = attrs.item(i); verifyAttributeDeclaration(((CMElementDeclaration) item), attr); } } }