/******************************************************************************* * Copyright (c) 2009 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.wst.xml.core.tests.dom; import junit.framework.TestCase; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.xml.core.internal.document.NodeListImpl; import org.eclipse.wst.xml.core.internal.provisional.contenttype.ContentTypeIdForXML; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.w3c.dom.Document; import org.w3c.dom.Node; public class NodeListImplTests extends TestCase { private static class AccessorNodeList extends NodeListImpl { public Node appendNode(Node node) { return super.appendNode(node); } public Node insertNode(Node node, int index) { return super.insertNode(node, index); } public Node removeNode(int index) { return super.removeNode(index); } } public NodeListImplTests() { } public NodeListImplTests(String name) { super(name); } public void testInsertAtIndex() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); assertEquals("non-zero length at start", 0, list.getLength()); list.appendNode(document.createElement("test0")); list.appendNode(document.createElement("test1")); list.appendNode(document.createElement("test2")); list.appendNode(document.createElement("test3")); list.appendNode(document.createElement("test4")); list.appendNode(document.createElement("test5")); list.appendNode(document.createElement("test6")); list.insertNode(document.createElement("test"), 3); assertEquals("list size did not increment", 8, list.getLength()); assertEquals("test0 was not at expected index", "test0", list.item(0).getLocalName()); assertEquals("test1 was not at expected index", "test1", list.item(1).getLocalName()); assertEquals("test2 was not at expected index", "test2", list.item(2).getLocalName()); assertEquals("test was not at expected index", "test", list.item(3).getLocalName()); assertEquals("test3 was not at expected index", "test3", list.item(4).getLocalName()); assertEquals("test4 was not at expected index", "test4", list.item(5).getLocalName()); assertEquals("test5 was not at expected index", "test5", list.item(6).getLocalName()); assertEquals("test6 was not at expected index", "test6", list.item(7).getLocalName()); } public void testRemoveFromIndex() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); list.appendNode(document.createElement("test0")); list.appendNode(document.createElement("test1")); list.appendNode(document.createElement("test2")); list.appendNode(document.createElement("test3")); list.appendNode(document.createElement("test4")); list.appendNode(document.createElement("test5")); list.appendNode(document.createElement("test6")); assertEquals("wrong length after setup", 7, list.getLength()); Node excised = list.removeNode(3); assertEquals("test3 was not the one removed", "test3", excised.getLocalName()); assertEquals("wrong length after removal", 6, list.getLength()); assertEquals("test0 was not at expected index", "test0", list.item(0).getLocalName()); assertEquals("test1 was not at expected index", "test1", list.item(1).getLocalName()); assertEquals("test2 was not at expected index", "test2", list.item(2).getLocalName()); assertEquals("test4 was not at expected index", "test4", list.item(3).getLocalName()); assertEquals("test5 was not at expected index", "test5", list.item(4).getLocalName()); assertEquals("test6 was not at expected index", "test6", list.item(5).getLocalName()); } public void testInsertAtNegativeIndex() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); // appends on bad value list.insertNode(document.createElement("test-1"),-1); assertEquals("wrong length after insert at negative index", 1, list.getLength()); } public void testRemoveFromNegativeIndex() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); list.appendNode(document.createElement("test-1")); // ignores bad index list.removeNode(-1); assertEquals("wrong length after removal at negative index", 1, list.getLength()); } public void testInsertAtExcessiveIndex() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); // appends on bad value list.insertNode(document.createElement("test3"), 3); assertEquals("wrong length after insert at out of bounds index", 1, list.getLength()); } public void testRemoveFromExcessiveIndex() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); list.appendNode(document.createElement("test0")); // ignores bad index list.removeNode(3); assertEquals("wrong length after removal at nonexistent index", 1, list.getLength()); } public void testAppend() { IDOMModel model = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML); Document document = model.getDocument(); AccessorNodeList list = new AccessorNodeList(); assertEquals("non-zero length at start", 0, list.getLength()); list.appendNode(document.createElement("test1")); assertEquals("list size did not increment", 1, list.getLength()); list.appendNode(document.createElement("test2")); assertEquals("list size did not increment", 2, list.getLength()); list.appendNode(document.createElement("test3")); assertEquals("list size did not increment", 3, list.getLength()); Node element4 = list.appendNode(document.createElement("test4")); assertEquals("list size did not increment", 4, list.getLength()); assertEquals("test4 not returned from append", "test4", element4.getLocalName()); Node element5 = list.appendNode(document.createElement("test5")); assertEquals("list size did not increment", 5, list.getLength()); assertEquals("test5 not returned from append", "test5", element5.getLocalName()); Node element6 = list.appendNode(document.createElement("test6")); assertEquals("list size did not increment", 6, list.getLength()); assertEquals("test6 not returned from append", "test6", element6.getLocalName()); Node element7 = list.appendNode(document.createElement("test7")); assertEquals("list size did not increment", 7, list.getLength()); assertEquals("test7 not returned from append", "test7", element7.getLocalName()); } }