dom/events/test/test_all_synthetic_events.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/events/test/test_all_synthetic_events.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,472 @@
     1.4 +<!DOCTYPE html>
     1.5 +<html>
     1.6 +<head>
     1.7 +  <title>Test all synthetic events</title>
     1.8 +  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     1.9 +  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
    1.10 +  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
    1.11 +</head>
    1.12 +<body>
    1.13 +<p id="display"></p>
    1.14 +<div id="content" style="display: none">
    1.15 +</div>
    1.16 +<pre id="test">
    1.17 +<script type="application/javascript">
    1.18 +
    1.19 +/**
    1.20 + * kEventConstructors is a helper and database of all events.
    1.21 + * The sort order of the definition is by A to Z (ignore the Event postfix).
    1.22 + *
    1.23 + * XXX: should we move this into EventUtils.js?
    1.24 + *
    1.25 + * create: function or null.  If this is null, it's impossible to create untrusted event for it.
    1.26 + *         Otherwise, create(aName, aProps) returns an instance of the event initialized with aProps.
    1.27 + *         aName specifies the event's type name.  See each create() code for the detail of aProps.
    1.28 + */
    1.29 +const kEventConstructors = {
    1.30 +  Event:                                     { create: function (aName, aProps) {
    1.31 +                                                         return new Event(aName, aProps);
    1.32 +                                                       },
    1.33 +                                             },
    1.34 +  AnimationEvent:                            { create: function (aName, aProps) {
    1.35 +                                                         return new AnimationEvent(aName, aProps);
    1.36 +                                                       },
    1.37 +                                             },
    1.38 +  AudioProcessingEvent:                      { create: null, // Cannot create untrusted event from JS.
    1.39 +                                             },
    1.40 +  BeforeUnloadEvent:                         { create: function (aName, aProps) {
    1.41 +                                                         var e = document.createEvent("beforeunloadevent");
    1.42 +                                                         e.initEvent(aName, aProps.bubbles, aProps.cancelable);
    1.43 +                                                         return e;
    1.44 +                                                       },
    1.45 +                                             },
    1.46 +  BlobEvent:                                 { create: function (aName, aProps) {
    1.47 +                                                         return new BlobEvent(aName, aProps);
    1.48 +                                                       },
    1.49 +                                             },
    1.50 +  BluetoothDeviceEvent:                      { create: function (aName, aProps) {
    1.51 +                                                          return new BluetoothDeviceEvent(aName, aProps);
    1.52 +                                                       },
    1.53 +                                             },
    1.54 +  BluetoothStatusChangedEvent:               { create: function (aName, aProps) {
    1.55 +                                                          return new BluetoothStatusChangedEvent(aName, aProps);
    1.56 +                                                       },
    1.57 +                                             },
    1.58 +  CallEvent:                                 { create: function (aName, aProps) {
    1.59 +                                                          return new CallEvent(aName, aProps);
    1.60 +                                                       },
    1.61 +                                             },
    1.62 +  CallGroupErrorEvent:                       { create: function (aName, aProps) {
    1.63 +                                                          return new CallGroupErrorEvent(aName, aProps);
    1.64 +                                                       },
    1.65 +                                             },
    1.66 +  CFStateChangeEvent:                        { create: function (aName, aProps) {
    1.67 +                                                          return new CFStateChangeEvent(aName, aProps);
    1.68 +                                                       },
    1.69 +                                             },
    1.70 +  CloseEvent:                                { create: function (aName, aProps) {
    1.71 +                                                         return new CloseEvent(aName, aProps);
    1.72 +                                                       },
    1.73 +                                             },
    1.74 +  ClipboardEvent:                            { create: function (aName, aProps) {
    1.75 +                                                         return new ClipboardEvent(aName, aProps);
    1.76 +                                                       },
    1.77 +                                             },
    1.78 +  CommandEvent:                              { create: function (aName, aProps) {
    1.79 +                                                         var e = document.createEvent("commandevent");
    1.80 +                                                         e.initCommandEvent(aName, aProps.bubbles, aProps.cancelable,
    1.81 +                                                                            aProps.command);
    1.82 +                                                         return e;
    1.83 +                                                       },
    1.84 +                                             },
    1.85 +  CompositionEvent:                          { create: function (aName, aProps) {
    1.86 +                                                         var e = document.createEvent("compositionevent");
    1.87 +                                                         e.initCompositionEvent(aName, aProps.bubbles, aProps.cancelable,
    1.88 +                                                                                aProps.view, aProps.data, aProps.locale);
    1.89 +                                                         return e;
    1.90 +                                                       },
    1.91 +                                             },
    1.92 +  CustomEvent:                               { create: function (aName, aProps) {
    1.93 +                                                         return new CustomEvent(aName, aProps);
    1.94 +                                                       },
    1.95 +                                             },
    1.96 +  DataErrorEvent:                            { create: function (aName, aProps) {
    1.97 +                                                          return new DataErrorEvent(aName, aProps);
    1.98 +                                                       },
    1.99 +                                             },
   1.100 +  DataContainerEvent:                        { create: function (aName, aProps) {
   1.101 +                                                         var e = document.createEvent("datacontainerevent");
   1.102 +                                                         e.initEvent(aName, aProps.bubbles, aProps.cancelable);
   1.103 +                                                         return e;
   1.104 +                                                       },
   1.105 +                                             },
   1.106 +  DataStoreChangeEvent:                      { create: function (aName, aProps) {
   1.107 +                                                         return new DataStoreChangeEvent(aProps);
   1.108 +                                                       },
   1.109 +                                             },
   1.110 +  DeviceLightEvent:                          { create: function (aName, aProps) {
   1.111 +                                                         return new DeviceLightEvent(aName, aProps);
   1.112 +                                                       },
   1.113 +                                             },
   1.114 +  DeviceMotionEvent:                         { create: function (aName, aProps) {
   1.115 +                                                         var e = document.createEvent("devicemotionevent");
   1.116 +                                                         e.initDeviceMotionEvent(aName, aProps.bubbles, aProps.cancelable, aProps.acceleration,
   1.117 +                                                                                 aProps.accelerationIncludingGravity, aProps.rotationRate,
   1.118 +                                                                                 aProps.interval || 0.0);
   1.119 +                                                         return e;
   1.120 +                                                       },
   1.121 +                                             },
   1.122 +  DeviceOrientationEvent:                    { create: function (aName, aProps) {
   1.123 +                                                         return new DeviceOrientationEvent(aName, aProps);
   1.124 +                                                       },
   1.125 +                                             },
   1.126 +  DeviceProximityEvent:                      { create: function (aName, aProps) {
   1.127 +                                                         return new DeviceProximityEvent(aName, aProps);
   1.128 +                                                       },
   1.129 +                                             },
   1.130 +  DeviceStorageChangeEvent:                  { create: function (aName, aProps) {
   1.131 +                                                         return new DeviceStorageChangeEvent(aName, aProps);
   1.132 +                                                       },
   1.133 +                                             },
   1.134 +  DownloadEvent:                             { create: function (aName, aProps) {
   1.135 +                                                         return new DownloadEvent(aName, aProps);
   1.136 +                                                       },
   1.137 +                                             },
   1.138 +  DOMTransactionEvent:                       { create: function (aName, aProps) {
   1.139 +                                                         return new DOMTransactionEvent(aName, aProps);
   1.140 +                                                       },
   1.141 +                                             },
   1.142 +  DragEvent:                                 { create: function (aName, aProps) {
   1.143 +                                                         var e = document.createEvent("dragevent");
   1.144 +                                                         e.initDragEvent(aName, aProps.bubbles, aProps.cancelable,
   1.145 +                                                                         aProps.view, aProps.detail,
   1.146 +                                                                         aProps.screenX, aProps.screenY,
   1.147 +                                                                         aProps.clientX, aProps.clientY,
   1.148 +                                                                         aProps.ctrlKey, aProps.altKey, aProps.shiftKey, aProps.metaKey,
   1.149 +                                                                         aProps.button, aProps.relatedTarget, aProps.dataTransfer);
   1.150 +                                                         return e;
   1.151 +                                                       },
   1.152 +                                             },
   1.153 +  ErrorEvent:                                { create: function (aName, aProps) {
   1.154 +                                                         return new ErrorEvent(aName, aProps);
   1.155 +                                                       },
   1.156 +  },
   1.157 +  ElementReplaceEvent:                       { create: function (aName, aProps) {
   1.158 +                                                         return new ElementReplaceEvent(aName, aProps);
   1.159 +                                                       },
   1.160 +                                             },
   1.161 +  FocusEvent:                                { create: function (aName, aProps) {
   1.162 +                                                         return new FocusEvent(aName, aProps);
   1.163 +                                                       },
   1.164 +                                             },
   1.165 +  GamepadEvent:                              { create: function (aName, aProps) {
   1.166 +                                                         return new GamepadEvent(aName, aProps);
   1.167 +                                                       },
   1.168 +                                             },
   1.169 +  GamepadAxisMoveEvent:                      { create: function (aName, aProps) {
   1.170 +                                                         return new GamepadAxisMoveEvent(aName, aProps);
   1.171 +                                                       },
   1.172 +                                             },
   1.173 +  GamepadButtonEvent:                        { create: function (aName, aProps) {
   1.174 +                                                         return new GamepadButtonEvent(aName, aProps);
   1.175 +                                                       },
   1.176 +                                             },
   1.177 +  HashChangeEvent:                           { create: function (aName, aProps) {
   1.178 +                                                         return new HashChangeEvent(aName, aProps);
   1.179 +                                                       },
   1.180 +                                             },
   1.181 +  IccChangeEvent:                            { create: function (aName, aProps) {
   1.182 +                                                         return new IccChangeEvent(aName, aProps);
   1.183 +                                                       },
   1.184 +                                             },
   1.185 +  IDBVersionChangeEvent:                     { create: function (aName, aProps) {
   1.186 +                                                         return new IDBVersionChangeEvent(aName, aProps);
   1.187 +                                                       },
   1.188 +                                             },
   1.189 +  InputEvent:                                { create: function (aName, aProps) {
   1.190 +                                                         return new InputEvent(aName, aProps);
   1.191 +                                                       },
   1.192 +                                             },
   1.193 +  KeyEvent:                                  { create: function (aName, aProps) {
   1.194 +                                                         return new KeyboardEvent(aName, aProps);
   1.195 +                                                       },
   1.196 +                                             },
   1.197 +  KeyboardEvent:                             { create: function (aName, aProps) {
   1.198 +                                                         return new KeyboardEvent(aName, aProps);
   1.199 +                                                       },
   1.200 +                                             },
   1.201 +  MediaStreamEvent:                          { create: function (aName, aProps) {
   1.202 +                                                         return new MediaStreamEvent(aName, aProps);
   1.203 +                                                       },
   1.204 +                                             },
   1.205 +  MessageEvent:                              { create: function (aName, aProps) {
   1.206 +                                                         var e = new MessageEvent("messageevent", { bubbles: aProps.bubbles,
   1.207 +                                                             cancelable: aProps.cancelable, data: aProps.data, origin: aProps.origin,
   1.208 +                                                             lastEventId: aProps.lastEventId, source: aProps.source });
   1.209 +                                                         return e;
   1.210 +                                                       },
   1.211 +                                             },
   1.212 +  MouseEvent:                                { create: function (aName, aProps) {
   1.213 +                                                         return new MouseEvent(aName, aProps);
   1.214 +                                                       },
   1.215 +                                             },
   1.216 +  MouseScrollEvent:                          { create: function (aName, aProps) {
   1.217 +                                                         var e = document.createEvent("mousescrollevents");
   1.218 +                                                         e.initMouseScrollEvent(aName, aProps.bubbles, aProps.cancelable,
   1.219 +                                                                                aProps.view, aProps.detail,
   1.220 +                                                                                aProps.screenX, aProps.screenY,
   1.221 +                                                                                aProps.clientX, aProps.clientY,
   1.222 +                                                                                aProps.ctrlKey, aProps.altKey, aProps.shiftKey, aProps.metaKey,
   1.223 +                                                                                aProps.button, aProps.relatedTarget, aProps.axis);
   1.224 +                                                         return e;
   1.225 +                                                       },
   1.226 +                                             },
   1.227 +  MozApplicationEvent:                       { create: function (aName, aProps) {
   1.228 +                                                         return new MozApplicationEvent(aName, aProps);
   1.229 +                                                       },
   1.230 +                                             },
   1.231 +  MozCellBroadcastEvent:                     { create: function (aName, aProps) {
   1.232 +                                                          return new MozCellBroadcastEvent(aName, aProps);
   1.233 +                                                       },
   1.234 +                                             },
   1.235 +  MozContactChangeEvent:                     { create: function (aName, aProps) {
   1.236 +                                                         return new MozContactChangeEvent(aName, aProps);
   1.237 +                                                       },
   1.238 +                                             },
   1.239 +  MozEmergencyCbModeEvent:                   { create: function (aName, aProps) {
   1.240 +                                                          return new MozEmergencyCbModeEvent(aName, aProps);
   1.241 +                                                       },
   1.242 +                                             },
   1.243 +  MozMmsEvent:                               { create: function (aName, aProps) {
   1.244 +                                                         return new MozMmsEvent(aName, aProps);
   1.245 +                                                       },
   1.246 +                                             },
   1.247 +  MozOtaStatusEvent:                         { create: function (aName, aProps) {
   1.248 +                                                          return new MozOtaStatusEvent(aName, aProps);
   1.249 +                                                       },
   1.250 +                                             },
   1.251 +  MozSettingsEvent:                          { create: function (aName, aProps) {
   1.252 +                                                         return new MozSettingsEvent(aName, aProps);
   1.253 +                                                       },
   1.254 +                                             },
   1.255 +  MozSmsEvent:                               { create: function (aName, aProps) {
   1.256 +                                                         return new MozSmsEvent(aName, aProps);
   1.257 +                                                       },
   1.258 +                                             },
   1.259 +  MozStkCommandEvent:                        { create: function (aName, aProps) {
   1.260 +                                                          return new MozStkCommandEvent(aName, aProps);
   1.261 +                                                       },
   1.262 +                                             },
   1.263 +  MozVoicemailEvent:                         { create: function (aName, aProps) {
   1.264 +                                                          return new MozVoicemailEvent(aName, aProps);
   1.265 +                                                       },
   1.266 +                                             },
   1.267 +  MozWifiConnectionInfoEvent:                { create: function (aName, aProps) {
   1.268 +                                                         return new MozWifiConnectionInfoEvent(aName, aProps);
   1.269 +                                                       },
   1.270 +                                             },
   1.271 +  MozWifiStatusChangeEvent:                  { create: function (aName, aProps) {
   1.272 +                                                          return new MozWifiStatusChangeEvent(aName, aProps);
   1.273 +                                                       },
   1.274 +                                             },
   1.275 +  MutationEvent:                             { create: function (aName, aProps) {
   1.276 +                                                         var e = document.createEvent("mutationevent");
   1.277 +                                                         e.initMutationEvent(aName, aProps.bubbles, aProps.cancelable,
   1.278 +                                                                             aProps.relatedNode, aProps.prevValue, aProps.newValue,
   1.279 +                                                                             aProps.attrName, aProps.attrChange);
   1.280 +                                                         return e;
   1.281 +                                                       },
   1.282 +                                             },
   1.283 +  NotifyPaintEvent:                          { create: function (aName, aProps) {
   1.284 +                                                         var e = document.createEvent("notifypaintevent");
   1.285 +                                                         e.initEvent(aName, aProps.bubbles, aProps.cancelable);
   1.286 +                                                         return e;
   1.287 +                                                       },
   1.288 +                                             },
   1.289 +  OfflineAudioCompletionEvent:               { create: null, // Cannot create untrusted event from JS.
   1.290 +                                             },
   1.291 +  PageTransitionEvent:                       { create: function (aName, aProps) {
   1.292 +                                                         return new PageTransitionEvent(aName, aProps);
   1.293 +                                                       },
   1.294 +                                             },
   1.295 +  PointerEvent:                              { create: function (aName, aProps) {
   1.296 +                                                         return new PointerEvent(aName, aProps);
   1.297 +                                                       },
   1.298 +                                             },
   1.299 +  PopStateEvent:                             { create: function (aName, aProps) {
   1.300 +                                                         return new PopStateEvent(aName, aProps);
   1.301 +                                                       },
   1.302 +                                             },
   1.303 +  PopupBlockedEvent:                         { create: function (aName, aProps) {
   1.304 +                                                         return new PopupBlockedEvent(aName, aProps);
   1.305 +                                                       },
   1.306 +                                             },
   1.307 +  ProgressEvent:                             { create: function (aName, aProps) {
   1.308 +                                                         return new ProgressEvent(aName, aProps);
   1.309 +                                                       },
   1.310 +                                             },
   1.311 +  RecordErrorEvent:                          { create: function (aName, aProps) {
   1.312 +                                                         return new RecordErrorEvent(aName, aProps);
   1.313 +                                                       },
   1.314 +                                             },
   1.315 +  RTCDataChannelEvent:                       { create: function (aName, aProps) {
   1.316 +                                                         return new RTCDataChannelEvent(aName, aProps);
   1.317 +                                                       },
   1.318 +                                             },
   1.319 +  RTCPeerConnectionIceEvent:                 { create: function (aName, aProps) {
   1.320 +                                                         return new RTCPeerConnectionIceEvent(aName, aProps);
   1.321 +                                                       },
   1.322 +                                             },
   1.323 +  RTCPeerConnectionIdentityEvent:            { create: function (aName, aProps) {
   1.324 +                                                         return new RTCPeerConnectionIdentityEvent(aName, aProps);
   1.325 +                                                       },
   1.326 +                                             },
   1.327 +  RTCPeerConnectionIdentityErrorEvent:       { create: function (aName, aProps) {
   1.328 +                                                         return new RTCPeerConnectionIdentityErrorEvent(aName, aProps);
   1.329 +                                                       },
   1.330 +                                             },
   1.331 +  ScrollAreaEvent:                           { create: function (aName, aProps) {
   1.332 +                                                         var e = document.createEvent("scrollareaevent");
   1.333 +                                                         e.initScrollAreaEvent(aName, aProps.bubbles, aProps.cancelable,
   1.334 +                                                                               aProps.view, aProps.details,
   1.335 +                                                                               aProps.x || 0.0, aProps.y || 0.0,
   1.336 +                                                                               aProps.width || 0.0, aProps.height || 0.0);
   1.337 +                                                         return e;
   1.338 +                                                       },
   1.339 +                                             },
   1.340 +  SimpleGestureEvent:                        { create: function (aName, aProps) {
   1.341 +                                                         var e = document.createEvent("simplegestureevent");
   1.342 +                                                         e.initSimpleGestureEvent(aName, aProps.bubbles, aProps.cancelable,
   1.343 +                                                                                  aProps.view, aProps.detail,
   1.344 +                                                                                  aProps.screenX, aProps.screenY,
   1.345 +                                                                                  aProps.clientX, aProps.clientY,
   1.346 +                                                                                  aProps.ctrlKey, aProps.altKey, aProps.shiftKey, aProps.metaKey,
   1.347 +                                                                                  aProps.button, aProps.relatedTarget,
   1.348 +                                                                                  aProps.allowedDirections, aProps.direction, aProps.delta || 0.0,
   1.349 +                                                                                  aProps.clickCount);
   1.350 +                                                         return e;
   1.351 +                                                       },
   1.352 +                                             },
   1.353 +  SmartCardEvent:                            { create: function (aName, aProps) {
   1.354 +                                                         return new SmartCardEvent(aName, aProps);
   1.355 +                                                       },
   1.356 +                                             },
   1.357 +  SpeechRecognitionEvent:                    { create: function (aName, aProps) {
   1.358 +                                                         return new SpeechRecognitionEvent(aName, aProps);
   1.359 +                                                       },
   1.360 +                                             },
   1.361 +  SpeechSynthesisEvent:                      { create: function (aName, aProps) {
   1.362 +                                                         return new SpeechSynthesisEvent(aName, aProps);
   1.363 +                                                       },
   1.364 +                                             },
   1.365 +  StorageEvent:                              { create: function (aName, aProps) {
   1.366 +                                                         return new StorageEvent(aName, aProps);
   1.367 +                                                       },
   1.368 +                                             },
   1.369 +  StyleRuleChangeEvent:                      { create: function (aName, aProps) {
   1.370 +                                                         return new StyleRuleChangeEvent(aName, aProps);
   1.371 +                                                       },
   1.372 +                                               chromeOnly: true,
   1.373 +                                             },
   1.374 +  StyleSheetApplicableStateChangeEvent:      { create: function (aName, aProps) {
   1.375 +                                                         return new StyleSheetApplicableStateChangeEvent(aName, aProps);
   1.376 +                                                       },
   1.377 +                                               chromeOnly: true,
   1.378 +                                             },
   1.379 +  StyleSheetChangeEvent:                     { create: function (aName, aProps) {
   1.380 +                                                         return new StyleSheetChangeEvent(aName, aProps);
   1.381 +                                                       },
   1.382 +                                               chromeOnly: true,
   1.383 +                                             },
   1.384 +  SVGZoomEvent:                              { create: function (aName, aProps) {
   1.385 +                                                         var e = document.createEvent("svgzoomevent");
   1.386 +                                                         e.initUIEvent(aName, aProps.bubbles, aProps.cancelable,
   1.387 +                                                                       aProps.view, aProps.detail);
   1.388 +                                                         return e;
   1.389 +                                                       },
   1.390 +                                             },
   1.391 +  TimeEvent:                                 { create: function (aName, aProps) {
   1.392 +                                                         var e = document.createEvent("timeevent");
   1.393 +                                                         e.initTimeEvent(aName, aProps.view, aProps.detail);
   1.394 +                                                         return e;
   1.395 +                                                       },
   1.396 +                                             },
   1.397 +  TouchEvent:                                { create: function (aName, aProps) {
   1.398 +                                                         var e = document.createEvent("touchevent");
   1.399 +                                                         e.initTouchEvent(aName, aProps.bubbles, aProps.cancelable,
   1.400 +                                                                          aProps.view, aProps.detail,
   1.401 +                                                                          aProps.ctrlKey, aProps.altKey, aProps.shiftKey, aProps.metaKey,
   1.402 +                                                                          aProps.touches, aProps.targetTouches, aProps.changedTouches);
   1.403 +                                                         return e;
   1.404 +                                                       },
   1.405 +                                             },
   1.406 +  TrackEvent:                                { create: function (aName, aProps) {
   1.407 +                                                         return new TrackEvent(aName, aProps);
   1.408 +                                                       },
   1.409 +                                             },
   1.410 +  TransitionEvent:                           { create: function (aName, aProps) {
   1.411 +                                                         return new TransitionEvent(aName, aProps);
   1.412 +                                                       },
   1.413 +                                             },
   1.414 +  UIEvent:                                   { create: function (aName, aProps) {
   1.415 +                                                         return new UIEvent(aName, aProps);
   1.416 +                                                       },
   1.417 +                                             },
   1.418 +  UserProximityEvent:                        { create: function (aName, aProps) {
   1.419 +                                                         return new UserProximityEvent(aName, aProps);
   1.420 +                                                       },
   1.421 +                                             },
   1.422 +  USSDReceivedEvent:                         { create: function (aName, aProps) {
   1.423 +                                                          return new USSDReceivedEvent(aName, aProps);
   1.424 +                                                       },
   1.425 +                                             },
   1.426 +  WheelEvent:                                { create: function (aName, aProps) {
   1.427 +                                                         return new WheelEvent(aName, aProps);
   1.428 +                                                       },
   1.429 +                                             },
   1.430 +};
   1.431 +
   1.432 +for (var name of Object.keys(kEventConstructors)) {
   1.433 +  if (!kEventConstructors[name].chromeOnly) {
   1.434 +    continue;
   1.435 +  }
   1.436 +  if (window[name]) {
   1.437 +    ok(false, name + " should be chrome only.");
   1.438 +  }
   1.439 +  window[name] = SpecialPowers.unwrap(SpecialPowers.wrap(window)[name]);
   1.440 +}
   1.441 +
   1.442 +var props = Object.getOwnPropertyNames(window);
   1.443 +for (var i = 0; i < props.length; i++) {
   1.444 +  // Assume that event object must be named as "FooBarEvent".
   1.445 +  if (!props[i].match(/^([A-Z][a-zA-Z]+)?Event$/)) {
   1.446 +    continue;
   1.447 +  }
   1.448 +  if (!kEventConstructors[props[i]]) {
   1.449 +    ok(false, "Unknown event found: " + props[i]);
   1.450 +    continue;
   1.451 +  }
   1.452 +  if (!kEventConstructors[props[i]].create) {
   1.453 +    todo(false, "Cannot create untrusted event of " + props[i]);
   1.454 +    continue;
   1.455 +  }
   1.456 +  ok(true, "Creating " + props[i] + "...");
   1.457 +  var event = kEventConstructors[props[i]].create("foo", {});
   1.458 +  if (!event) {
   1.459 +    ok(false, "Failed to create untrusted event: " + props[i]);
   1.460 +    continue;
   1.461 +  }
   1.462 +  if (typeof(event.getModifierState) == "function") {
   1.463 +    const kModifiers = [ "Shift", "Control", "Alt", "AltGr", "Meta", "CapsLock", "ScrollLock", "NumLock", "OS", "Fn", "SymbolLock" ];
   1.464 +    for (var j = 0; j < kModifiers.length; j++) {
   1.465 +      ok(true, "Calling " + props[i] + ".getModifierState(" + kModifiers[j] + ")...");
   1.466 +      var modifierState = event.getModifierState(kModifiers[j]);
   1.467 +      ok(true, props[i] + ".getModifierState(" + kModifiers[j] + ") = " + modifierState);
   1.468 +    }
   1.469 +  }
   1.470 +}
   1.471 +
   1.472 +</script>
   1.473 +</pre>
   1.474 +</body>
   1.475 +</html>

mercurial