in 2019/functional/domDocumentEventTest.js [24:286]
var DomdocumentTest = function() {
var domDocumentVersion = 'Current Editor\'s Draft';
var tests = [];
var info = 'Spec Version: ' + domDocumentVersion + ' | Default Timeout: ' +
TestBase.timeout + 'ms';
var fields = ['passes', 'failures', 'timeouts'];
var createDocumentTest = function(name, category, mandatory) {
var t = createTest(name);
t.prototype.index = tests.length;
t.prototype.passes = 0;
t.prototype.failures = 0;
t.prototype.timeouts = 0;
t.prototype.category = category || 'Dom Document Event';
if (typeof mandatory === 'boolean') {
t.prototype.mandatory = mandatory;
}
tests.push(t);
return t;
};
/**
* Ensure the DOM implementation of specified method through Modernizr.
*/
var createCommonDomTest = function(value, category, element, mandatory) {
var name = category.replace(/\s/g, '') + '.' + value;
var test = createDocumentTest(name, category, mandatory);
test.prototype.title = 'Test DOM Implementation of ' + name;
test.prototype.start = function() {
try {
if (Modernizr.prefixed(value, element, false) != false)
this.runner.succeed();
else
throw 'Failed: ' + name + ': ' +
Modernizr.prefixed(value, element, false);
} catch (e) {
this.runner.fail(e);
}
}
};
// Category: DOM Implementation.
var createDomImplementationTest = function(value, mandatory) {
createCommonDomTest(
value, 'DOM Implementation', document.implementation, mandatory);
};
createDomImplementationTest('createDocument');
createDomImplementationTest('createDocumentType', false);
createDomImplementationTest('hasFeature', false);
// Category: Document.
var createDocumentCommonTest = function(value, mandatory) {
createCommonDomTest(value, 'Document', document, mandatory);
};
createDocumentCommonTest('createAttribute', false);
createDocumentCommonTest('createAttributeNS', false);
createDocumentCommonTest('createCDATASection', false);
createDocumentCommonTest('createComment');
createDocumentCommonTest('createDocumentFragment', false);
createDocumentCommonTest('createElement');
createDocumentCommonTest('createElementNS');
createDocumentCommonTest('createProcessingInstruction', false);
createDocumentCommonTest('createTextNode');
createDocumentCommonTest('doctype', false);
createDocumentCommonTest('documentElement');
createDocumentCommonTest('getElementById');
createDocumentCommonTest('getElementsByTagName');
createDocumentCommonTest('getElementsByTagNameNS', false);
createDocumentCommonTest('implementation');
createDocumentCommonTest('importNode', false);
createDocumentCommonTest('createEvent');
createDocumentCommonTest('styleSheets');
// Category: DocumentType.
var createDoctypeTest = function(value, mandatory) {
createCommonDomTest(value, 'DocumentType', document.doctype, mandatory);
};
createDoctypeTest('name', false);
createDoctypeTest('publicId', false);
createDoctypeTest('systemId', false);
// Category: Element.
var createDomBodyTest = function(value, mandatory) {
createCommonDomTest(value, 'Element', document.body, mandatory);
};
createDomBodyTest('getAttribute');
createDomBodyTest('getAttributeNS', false);
createDomBodyTest('getAttributeNode', false);
createDomBodyTest('getAttributeNodeNS', false);
createDomBodyTest('getElementsByTagName');
createDomBodyTest('getElementsByTagNameNS', false);
createDomBodyTest('hasAttribute');
createDomBodyTest('hasAttributeNS', false);
createDomBodyTest('removeAttribute');
createDomBodyTest('removeAttributeNS', false);
createDomBodyTest('removeAttributeNode', false);
createDomBodyTest('setAttribute');
createDomBodyTest('setAttributeNS', false);
createDomBodyTest('setAttributeNode', false);
createDomBodyTest('setAttributeNodeNS', false);
createDomBodyTest('tagName');
createDomBodyTest('style');
// Category: Event.
/**
* Validate the existence of specified event properties.
*/
var createCommonEventTest = function(value, category, element, mandatory) {
var name = category.replace(/\s/g, '') + '.' + value;
var test = createDocumentTest(name, category, mandatory);
test.prototype.title = 'Test event existence of ' + name;
test.prototype.start = function() {
try {
if (Modernizr.hasEvent(value, element))
this.runner.succeed();
else
throw 'Failed: ' + name + ': ' + Modernizr.hasEvent(value, element);
} catch (e) {
this.runner.fail(e);
}
}
};
var createVideoEventTest = function(value, mandatory) {
var videoElement = document.createElement("video");
createCommonEventTest(value, 'Event', videoElement, mandatory);
}
createVideoEventTest('durationchange', false);
createVideoEventTest('ended', false);
createVideoEventTest('loadeddata', false);
createVideoEventTest('loadedmetadata', false);
createVideoEventTest('loadstart');
createVideoEventTest('pause');
createVideoEventTest('play', false);
createVideoEventTest('playing', false);
createVideoEventTest('progress', false);
createVideoEventTest('seeked', false);
createVideoEventTest('seeking', false);
createVideoEventTest('stalled', false);
createVideoEventTest('suspend', false);
createVideoEventTest('timeupdate', false);
createVideoEventTest('waiting', false);
createCommonEventTest('error', 'Event', window, false);
createCommonDomTest(
'preventDefault', 'Event', document.createEvent('Event'), false);
createCommonDomTest(
'stopPropagation', 'Event', document.createEvent('Event'), false);
var testInitEvent = createDocumentTest('Event.initEvent', 'Event');
testInitEvent.prototype.title = 'Test event existence of Event.initEvent';
testInitEvent.prototype.start = function() {
try {
if (document.createEvent('Events').initEvent != null)
this.runner.succeed();
else
throw "Event.initEvent not supported";
} catch (e) {
this.runner.fail(e);
}
};
// Category: EventTarget.
var createEventTargetTest = function(value) {
createCommonDomTest(value, 'EventTarget', document.body);
};
createEventTargetTest('addEventListener');
createEventTargetTest('dispatchEvent');
createEventTargetTest('removeEventListener');
// Category: HTMLAnchorElement.
createCommonDomTest('focus', 'HTMLAnchorElement', document.createElement('a'));
// Category: HTML Document.
createCommonDomTest('body', 'HTML Document', document);
createCommonDomTest('cookie', 'HTML Document', document);
var createHTMLDocumentEventTest = function(value, element, mandatory) {
createCommonEventTest(value, 'HTML Document', element, mandatory);
};
createHTMLDocumentEventTest('blur', document.body);
createHTMLDocumentEventTest('focus', document.body);
createHTMLDocumentEventTest('load', document.body);
createHTMLDocumentEventTest('resize', window, false);
createHTMLDocumentEventTest('unload', document.body, false);
// Category: HTML Element.
var createHTMLElementTest = function(value, element, mandatory) {
createCommonDomTest(value, 'HTML Element', element, mandatory);
};
createHTMLElementTest('className', document.body);
createHTMLElementTest('getBoundingClientRect', document.body);
createHTMLElementTest('id', document.body);
createHTMLElementTest('innerHTML', document.body);
createHTMLElementTest('nodeName', document.body);
createHTMLElementTest('nodeType', document.body);
createHTMLElementTest('style', document.body);
createHTMLElementTest('textContent', document.body);
// Category: HTML IFrame Element.
createCommonDomTest(
'contentWindow',
'HTML IFrame Element',
document.createElement('iframe'),
false);
// Category: HTML Input Element.
createCommonDomTest(
'focus', 'HTML Input Element', document.createElement('input'));
// Category: HTML Media Element.
/**
* Ensure the DOM implementation of specified properties of HTMLMediaElement.
*/
var createMediaElementTest = function(value, mandatory) {
var name = 'HTMLMediaElement.' + value;
var test = createDocumentTest(name, 'HTML Media Element', mandatory);
test.prototype.title = 'Test DOM Implementation of HTMLMediaElement.' + value;
test.prototype.start = function() {
try {
if (document.createElement('video')[value] != undefined)
this.runner.succeed();
else
throw 'Failed: HTMLMediaElement.' + name;
} catch (e) {
this.runner.fail(e);
}
}
};
createMediaElementTest('canPlayType');
createMediaElementTest('autoplay');
createMediaElementTest('load');
createMediaElementTest('pause');
createMediaElementTest('play');
createMediaElementTest('muted');
createMediaElementTest('volume');
createMediaElementTest('currentTime');
createMediaElementTest('duration');
createMediaElementTest('buffered');
createMediaElementTest('paused');
createMediaElementTest('ended');
// Category: HTML Select Element.
createCommonDomTest(
'focus', 'HTML Select Element', document.createElement('select'));
return {tests: tests, info: info, fields: fields, viewType: 'default'};
};