| /******************************************************************************* |
| * Copyright (c) 2006 |
| * 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: |
| * Balazs Banfai: Bug 154737 getUserData/setUserData support for Node |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=154737 |
| *******************************************************************************/ |
| |
| |
| package org.eclipse.wst.xml.core.internal.document.test; |
| import junit.framework.TestCase; |
| |
| import org.eclipse.wst.xml.core.internal.document.AttrImpl; |
| import org.eclipse.wst.xml.core.internal.document.DOMModelImpl; |
| import org.eclipse.wst.xml.core.internal.document.NodeImpl; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| import org.w3c.dom.Node; |
| import org.w3c.dom.UserDataHandler; |
| |
| |
| public class NodeImplTestCase extends TestCase { |
| /** |
| * Casts to implementation classes because the interface methods being |
| * there isn't the interesting part, just whether our behavior with those |
| * methods is correct. |
| */ |
| |
| NodeImpl element; |
| AttrImpl attribute; |
| NodeImpl destinationNode; |
| Document document; |
| |
| Element elementToImport; |
| |
| private static final String KEY="key"; |
| private static final String VALUE="value"; |
| private static final String KEY2="key2"; |
| private static final String VALUE2="value2"; |
| private static final boolean DEBUG = false; |
| |
| |
| /** |
| * Sets up the test fixture. |
| * (Called before every test case method.) |
| */ |
| protected void setUp() { |
| |
| DOMModelImpl model = new DOMModelImpl(); |
| document = model.getDocument(); |
| element = (NodeImpl)document.createElement("testelement"); |
| attribute = (AttrImpl)document.createAttribute("attribute"); |
| } |
| |
| /* |
| * Test for null; |
| */ |
| public void testGetUserData0() { |
| assertEquals(null, element.getUserData(KEY)); |
| assertEquals(null, element.getUserData(null)); |
| } |
| |
| /* |
| * Test for one key/value |
| */ |
| public void testGetUserData1() { |
| element.setUserData(KEY, VALUE, null); |
| assertEquals(VALUE,element.getUserData(KEY)); |
| assertEquals(null, attribute.getUserData(KEY)); |
| } |
| |
| /* |
| * Test for multiple nodes |
| */ |
| public void testGetUserData2() { |
| element.setUserData(KEY, VALUE, null); |
| assertEquals(VALUE,element.getUserData(KEY)); |
| attribute.setUserData(KEY2, VALUE2, null); |
| assertEquals(VALUE2,attribute.getUserData(KEY2)); |
| } |
| |
| /* |
| * Test for multiple keys |
| */ |
| public void testGetUserData3() { |
| element.setUserData(KEY, VALUE, null); |
| element.setUserData(KEY2, VALUE2, null); |
| assertEquals(VALUE,element.getUserData(KEY)); |
| assertEquals(VALUE2,element.getUserData(KEY2)); |
| } |
| |
| /* |
| * Test for null key |
| */ |
| public void testSetUserData1() { |
| assertEquals(null, element.setUserData(null, VALUE, null)); |
| } |
| |
| /* |
| * Test for null data with no previous value |
| */ |
| public void testSetUserData2() { |
| assertEquals(null, element.setUserData(KEY, null, null)); |
| } |
| |
| /* |
| * Test for overwriting |
| */ |
| public void testSetUserData3() { |
| element.setUserData(KEY, VALUE, null); |
| element.setUserData(KEY, VALUE2, null); |
| assertEquals(VALUE2, element.getUserData(KEY)); |
| } |
| |
| /* |
| * Test for deleting |
| */ |
| public void testSetUserData4() { |
| element.setUserData(KEY, VALUE, null); |
| assertEquals(VALUE, element.getUserData(KEY)); |
| element.setUserData(KEY, null, null); |
| assertEquals(null, element.getUserData(KEY)); |
| } |
| |
| /* |
| * Test for notifying the UserDataHandler=null |
| */ |
| public void testNotifyUserDataHandler0() { |
| |
| attribute.setUserData(KEY, VALUE, null); |
| destinationNode=(NodeImpl)attribute.cloneNode(true); |
| } |
| |
| /* |
| * Test for notifying the UserDataHandler when cloning an attribute |
| */ |
| public void testNotifyUserDataHandler1() { |
| |
| attribute.setUserData(KEY, VALUE, new UserDataHandler(){ |
| |
| public void handle(short operation, String key, Object data, Node src, Node dst) { |
| assertEquals(UserDataHandler.NODE_CLONED, operation); |
| assertEquals(VALUE, data); |
| assertEquals(KEY, key); |
| assertEquals(src, attribute); |
| |
| if(DEBUG) |
| System.out.println("Operation: "+operation+" Key:"+ key |
| + " Object:"+data+" SourceNode:"+src.getLocalName()+" DestinationNode:"+dst.getLocalName()); |
| |
| } |
| }); |
| //event occurs before the destinationNode returns.... |
| destinationNode=(AttrImpl)attribute.cloneNode(true); |
| } |
| |
| /* |
| * Test for notifying the UserDataHandler when importing |
| */ |
| public void testNotifyUserDataHandler2() { |
| elementToImport = document.createElement("ElementToImport"); |
| ((NodeImpl)elementToImport).setUserData(KEY, VALUE, new UserDataHandler(){ |
| |
| public void handle(short operation, String key, Object data, Node src, Node dst) { |
| |
| //see if NODE.IMPORTED notification occurs with the right |
| //parameters |
| if (operation==UserDataHandler.NODE_IMPORTED) { |
| assertEquals(VALUE, data); |
| assertEquals(KEY, key); |
| assertEquals(src, elementToImport); |
| assertEquals(dst, null); |
| if(DEBUG) |
| System.out.println("Operation: "+operation+" Key:"+ key |
| + " Object:"+data+" SourceNode:"+src.getLocalName()+" DestinationNode:"+dst); |
| } |
| } |
| }); |
| document.importNode(elementToImport, true); |
| } |
| } |