Tests framework event listeners output in the Elements sidebar panel.

== Incorrect fetchers

======== click ========
== Framework
[expanded] button#inspectedNodeRemoveevent-listener-sidebar-custom-framework.js:30
    useCapture: false
    passive: false
    once: false
    handler: function internalHandler(e)
          {
              console.log("I'm internal event handler");
              if (e.type === "customFirst")
                  customFirstEventListener(e);
              if (e.type === "customSecond")
                  customSecondEventListener(e);
          }

======== customFirst ========
== FrameworkUser
[expanded] button#inspectedNodeevent-listener-sidebar-custom-framework.js:20
    useCapture: true
    passive: false
    once: false
    handler: function customFirstEventListener(e)
          {
              console.log("I'm first custom event listener");
          }

======== customSecond ========
== FrameworkUser
[expanded] button#inspectedNodeevent-listener-sidebar-custom-framework.js:25
    useCapture: false
    passive: false
    once: false
    handler: function customSecondEventListener(e)
          {
              console.log("I'm second custom event listener");
          }
== Exception in fetchers' getter

======== click ========
== Raw
[expanded] button#inspectedNodeRemoveevent-listener-sidebar-custom-framework.js:30
    useCapture: false
    passive: false
    once: false
    handler: function internalHandler(e)
          {
              console.log("I'm internal event handler");
              if (e.type === "customFirst")
                  customFirstEventListener(e);
              if (e.type === "customSecond")
                  customSecondEventListener(e);
          }
Framework Event Listeners API Errors:
	fetcher call produced error: Error in fetcher
	fetcher call produced error: TypeError: Cannot read property 'eventListeners' of null
	fetcher call produced error: TypeError: Cannot read property 'eventListeners' of undefined
	internal handler isn't a function or empty
	internal handler isn't a function or empty
	fetcher call produced error: Error in getter
	event listener's type isn't string or empty, event listener's useCapture isn't boolean or undefined, event listener's passive isn't boolean or undefined, event listener's once isn't boolean or undefined, event listener's handler isn't a function or empty
	Error in getter
	Error in getter
	internal handler isn't a function or empty
	internal handler isn't a function or empty
	internal handler isn't a function or empt
Framework Event Listeners API Errors:
	devtoolsFrameworkEventListeners call produced error: Error in gette

