Tests to ensure that event dispatching behaves as the Shadow DOM spec describes.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".




Composed Shadow Tree will be:
DIV	 id=sandbox
	DIV	 id=top
		DIV	 id=shadow-host
			#text	


Moving mouse from a distributed text node to top

  mouseout
     @shadow-host (target: shadow-host) (related: top)
     @top (target: shadow-host) (related: top)

  mouseover
     @top (target: top) (related: shadow-host)

  mousewheel
     @content (target: content)
     @shadow-root (target: content)
     @shadow-host (target: shadow-host)
     @top (target: shadow-host)

  touchstart
     @content (target: content) (touches: content) (targetTouches: content) (changedTouches: content)
     @shadow-root (target: content) (touches: content) (targetTouches: content) (changedTouches: content)
     @shadow-host (target: shadow-host) (touches: shadow-host) (targetTouches: shadow-host) (changedTouches: shadow-host)
     @top (target: shadow-host) (touches: shadow-host) (targetTouches: shadow-host) (changedTouches: shadow-host)
PASS successfullyParsed is true

TEST COMPLETE
Text Node

