• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2/*
3Copyright © 2001-2004 World Wide Web Consortium,
4(Massachusetts Institute of Technology, European Research Consortium
5for Informatics and Mathematics, Keio University). All
6Rights Reserved. This work is distributed under the W3C® Software License [1] in the
7hope that it will be useful, but WITHOUT ANY WARRANTY; without even
8the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9
10[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
11*/
12
13
14
15   /**
16    *  Gets URI that identifies the test.
17    *  @return uri identifier of test
18    */
19function getTargetURI() {
20      return "http://www.w3.org/2001/DOM-Test-Suite/level2/events/dispatchEvent13";
21   }
22
23var docsLoaded = -1000000;
24var builder = null;
25
26//
27//   This function is called by the testing framework before
28//      running the test suite.
29//
30//   If there are no configuration exceptions, asynchronous
31//        document loading is started.  Otherwise, the status
32//        is set to complete and the exception is immediately
33//        raised when entering the body of the test.
34//
35function setUpPage() {
36   setUpPageStatus = 'running';
37   try {
38     //
39     //   creates test document builder, may throw exception
40     //
41     builder = createConfiguredBuilder();
42
43      docsLoaded = 0;
44
45      var docRef = null;
46      if (typeof(this.doc) != 'undefined') {
47        docRef = this.doc;
48      }
49      docsLoaded += preload(docRef, "doc", "hc_staff");
50
51       if (docsLoaded == 1) {
52          setUpPageStatus = 'complete';
53       }
54    } catch(ex) {
55    	catchInitializationError(builder, ex);
56        setUpPageStatus = 'complete';
57    }
58}
59
60
61
62//
63//   This method is called on the completion of
64//      each asychronous load started in setUpTests.
65//
66//   When every synchronous loaded document has completed,
67//      the page status is changed which allows the
68//      body of the test to be executed.
69function loadComplete() {
70    if (++docsLoaded == 1) {
71        setUpPageStatus = 'complete';
72    }
73}
74
75
76     /**
77      *    Inner class implementation for variable listener1
78      */
79var listener1;
80
81/**
82        * Constructor
83
84        * @param events Value from value attribute of nested var element
85        * @param listeners Value from value attribute of nested var element
86        */
87
88function EventListenerN1003B(events, listeners) {
89           this.events = events;
90           this.listeners = listeners;
91           }
92
93        /**
94         *
95This method is called whenever an event occurs of the type for which theEventListenerinterface was registered.
96
97         * @param evt
98TheEventcontains contextual information about the event. It also contains thestopPropagationand preventDefaultmethods which are used in determining the event's flow and default action.
99
100         */
101EventListenerN1003B.prototype.handleEvent = function(evt) {
102         //
103         //   bring class variables into function scope
104         //
105        var events = listener1.events;
106           var listeners = listener1.listeners;
107           var target;
108      var listener;
109      events[events.length] = evt;
110target = evt.currentTarget;
111
112      for(var indexN10065 = 0;indexN10065 < listeners.length; indexN10065++) {
113      listener = listeners[indexN10065];
114      target.removeEventListener("foo", listener.handleEvent, false);
115
116	}
117   }
118
119     /**
120      *    Inner class implementation for variable listener2
121      */
122var listener2;
123
124/**
125        * Constructor
126
127        * @param events Value from value attribute of nested var element
128        * @param listeners Value from value attribute of nested var element
129        */
130
131function EventListenerN10074(events, listeners) {
132           this.events = events;
133           this.listeners = listeners;
134           }
135
136        /**
137         *
138This method is called whenever an event occurs of the type for which theEventListenerinterface was registered.
139
140         * @param evt
141TheEventcontains contextual information about the event. It also contains thestopPropagationand preventDefaultmethods which are used in determining the event's flow and default action.
142
143         */
144EventListenerN10074.prototype.handleEvent = function(evt) {
145         //
146         //   bring class variables into function scope
147         //
148        var events = listener2.events;
149           var listeners = listener2.listeners;
150           var target;
151      var listener;
152      events[events.length] = evt;
153target = evt.currentTarget;
154
155      for(var indexN10098 = 0;indexN10098 < listeners.length; indexN10098++) {
156      listener = listeners[indexN10098];
157      target.removeEventListener("foo", listener.handleEvent, false);
158
159	}
160   }
161
162/**
163*
164Two listeners are registered on the same target, each of which will remove both itself and
165the other on the first event.  Only one should see the event since event listeners
166can never be invoked after being removed.
167
168* @author Curt Arnold
169* @see http://www.w3.org/TR/DOM-Level-2-Events/events#Events-EventTarget-dispatchEvent
170* @see http://www.w3.org/TR/DOM-Level-2-Events/events#xpointer(id('Events-EventTarget-dispatchEvent')/raises/exception[@name='EventException']/descr/p[substring-before(.,':')='UNSPECIFIED_EVENT_TYPE_ERR'])
171*/
172function dispatchEvent13() {
173   var success;
174    if(checkInitialization(builder, "dispatchEvent13") != null) return;
175    var doc;
176      var target;
177      var evt;
178      var preventDefault;
179      var listeners = new Array();
180
181      var events = new Array();
182
183      listener1 = new EventListenerN1003B(events, listeners);
184
185      listener2 = new EventListenerN10074(events, listeners);
186
187
188      var docRef = null;
189      if (typeof(this.doc) != 'undefined') {
190        docRef = this.doc;
191      }
192      doc = load(docRef, "doc", "hc_staff");
193      listeners[listeners.length] = listener1;
194listeners[listeners.length] = listener2;
195doc.addEventListener("foo", listener1.handleEvent, false);
196      doc.addEventListener("foo", listener2.handleEvent, false);
197      evt = doc.createEvent("Events");
198      evt.initEvent("foo",true,false);
199      preventDefault = doc.dispatchEvent(evt);
200      assertSize("eventCount",1,events);
201
202}
203
204
205
206
207function runTest() {
208   dispatchEvent13();
209}
210