question: 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 ) ; }
target:  A shallow clone requires cloning the attributes but not the child nodes.