public void testUserDataHandlerNotifiedOfShallowClones(){
  RecordingHandler handler=new RecordingHandler();
  name.setUserData("a","apple",handler);
  name.setUserData("b","banana",handler);
  standard.setUserData("c","cat",handler);
  waffles.setUserData("d","dog",handler);
  Element clonedName=(Element)name.cloneNode(false);
  Attr clonedStandard=clonedName.getAttributeNode("a:standard");
  Set<String> expected=new HashSet<String>();
  expected.add(notification(NODE_CLONED,"a","apple",name,clonedName));
  expected.add(notification(NODE_CLONED,"b","banana",name,clonedName));
  expected.add(notification(NODE_CLONED,"c","cat",standard,clonedStandard));
  assertEquals(expected,handler.calls);
}

public void testUserDataHandlerNotifiedOfShallowClones ( ) { RecordingHandler handler = new RecordingHandler ( ) ; name . setUserData ( "a" , "apple" , handler ) ; name . setUserData ( "b" , "banana" , handler ) ; standard . setUserData ( "c" , "cat" , handler ) ; waffles . setUserData ( "d" , "dog" , handler ) ; Element clonedName = ( Element ) name . cloneNode ( false ) ; Attr clonedStandard = clonedName . getAttributeNode ( "a:standard" ) ; Set < String > expected = new HashSet < String > ( ) ; expected . add ( notification ( NODE_CLONED , "a" , "apple" , name , clonedName ) ) ; expected . add ( notification ( NODE_CLONED , "b" , "banana" , name , clonedName ) ) ; expected . add ( notification ( NODE_CLONED , "c" , "cat" , standard , clonedStandard ) ) ; assertEquals ( expected , handler . calls ) ; }
a shallow clone requires cloning the attributes but not the child nodes .
