blob: 482de340b46930c91abb4a9258f12ecddffe34f2 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}