Auto merge of #6037 - jgraham:wpt_update, r=Ms2ger

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6037)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-05-14 09:00:09 -05:00
commit 8979d77e77
99 changed files with 1957 additions and 1685 deletions

View file

@ -3,4 +3,4 @@
reftype: ==
refurl: /2dcontext/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm
expected: FAIL
disabled: intermittent pass #5803
disabled: intermittent pass (issue 5803)

View file

@ -2,4 +2,4 @@
type: reftest
reftype: ==
refurl: /2dcontext/line-styles/canvas_linestyles_linecap_001-ref.htm
disabled: intermittently passing #5714
disabled: intermittently passing (issue 5714)

View file

@ -1,3 +1,3 @@
[canvas_shadows_002.htm]
type: reftest
disabled: intermittent failure #5207
disabled: intermittent failure (issue 5207)

View file

@ -3,4 +3,4 @@
reftype: ==
refurl: /2dcontext/the-canvas-state/canvas_state_restore_001-ref.htm
expected: FAIL
disabled: intermittent pass #5764
disabled: intermittent pass (issue 5764)

View file

@ -0,0 +1,3 @@
[canvas_transformations_reset_001.html]
type: reftest
expected: FAIL

View file

@ -117,3 +117,6 @@
[Newlines should not change when endings is 'native'.]
expected: FAIL
[Blob interface object]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -30,9 +30,6 @@
[XMLHttpRequest interface: operation send([object Object\],[object Object\])]
expected: FAIL
[XMLHttpRequest interface: calling open(ByteString,USVString,boolean,USVString,USVString) on new XMLHttpRequest() with too few arguments must throw TypeError]
expected: FAIL
[XMLHttpRequest interface: new XMLHttpRequest() must inherit property "overrideMimeType" with the proper type (20)]
expected: FAIL

View file

@ -2,3 +2,4 @@
type: testharness
[requestAnimationFrame callback is invoked at least once before the timeout]
expected: FAIL

View file

@ -153,12 +153,6 @@
[Document interface: calling createNodeIterator(Node,unsigned long,NodeFilter) on xmlDoc with too few arguments must throw TypeError]
expected: FAIL
[Document interface: calling prepend([object Object\],[object Object\]) on xmlDoc with too few arguments must throw TypeError]
expected: FAIL
[Document interface: calling append([object Object\],[object Object\]) on xmlDoc with too few arguments must throw TypeError]
expected: FAIL
[Document interface: xmlDoc must inherit property "query" with the proper type (34)]
expected: FAIL
@ -201,12 +195,6 @@
[DocumentFragment interface: calling getElementById(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError]
expected: FAIL
[DocumentFragment interface: calling prepend([object Object\],[object Object\]) on document.createDocumentFragment() with too few arguments must throw TypeError]
expected: FAIL
[DocumentFragment interface: calling append([object Object\],[object Object\]) on document.createDocumentFragment() with too few arguments must throw TypeError]
expected: FAIL
[DocumentFragment interface: document.createDocumentFragment() must inherit property "query" with the proper type (7)]
expected: FAIL
@ -225,15 +213,6 @@
[DocumentType interface object length]
expected: FAIL
[DocumentType interface: calling before([object Object\],[object Object\]) on document.doctype with too few arguments must throw TypeError]
expected: FAIL
[DocumentType interface: calling after([object Object\],[object Object\]) on document.doctype with too few arguments must throw TypeError]
expected: FAIL
[DocumentType interface: calling replaceWith([object Object\],[object Object\]) on document.doctype with too few arguments must throw TypeError]
expected: FAIL
[Element interface: existence and properties of interface object]
expected: FAIL
@ -297,12 +276,6 @@
[Element interface: calling removeAttributeNode(Attr) on element with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling prepend([object Object\],[object Object\]) on element with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling append([object Object\],[object Object\]) on element with too few arguments must throw TypeError]
expected: FAIL
[Element interface: element must inherit property "query" with the proper type (33)]
expected: FAIL
@ -315,15 +288,6 @@
[Element interface: calling queryAll(DOMString) on element with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling before([object Object\],[object Object\]) on element with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling after([object Object\],[object Object\]) on element with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling replaceWith([object Object\],[object Object\]) on element with too few arguments must throw TypeError]
expected: FAIL
[NamedNodeMap interface object length]
expected: FAIL
@ -348,42 +312,18 @@
[Text interface object length]
expected: FAIL
[CharacterData interface: calling before([object Object\],[object Object\]) on document.createTextNode("abc") with too few arguments must throw TypeError]
expected: FAIL
[CharacterData interface: calling after([object Object\],[object Object\]) on document.createTextNode("abc") with too few arguments must throw TypeError]
expected: FAIL
[CharacterData interface: calling replaceWith([object Object\],[object Object\]) on document.createTextNode("abc") with too few arguments must throw TypeError]
expected: FAIL
[ProcessingInstruction interface: existence and properties of interface object]
expected: FAIL
[ProcessingInstruction interface object length]
expected: FAIL
[CharacterData interface: calling before([object Object\],[object Object\]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError]
expected: FAIL
[CharacterData interface: calling after([object Object\],[object Object\]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError]
expected: FAIL
[CharacterData interface: calling replaceWith([object Object\],[object Object\]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError]
expected: FAIL
[Comment interface: existence and properties of interface object]
expected: FAIL
[Comment interface object length]
expected: FAIL
[CharacterData interface: calling before([object Object\],[object Object\]) on document.createComment("abc") with too few arguments must throw TypeError]
expected: FAIL
[CharacterData interface: calling after([object Object\],[object Object\]) on document.createComment("abc") with too few arguments must throw TypeError]
expected: FAIL
[Range interface: operation collapse(boolean)]
expected: FAIL
@ -513,12 +453,6 @@
[DOMTokenList interface: operation toggle(DOMString,boolean)]
expected: FAIL
[DOMTokenList interface: calling add(DOMString) on document.body.classList with too few arguments must throw TypeError]
expected: FAIL
[DOMTokenList interface: calling remove(DOMString) on document.body.classList with too few arguments must throw TypeError]
expected: FAIL
[DOMSettableTokenList interface: existence and properties of interface object]
expected: FAIL
@ -534,12 +468,60 @@
[DOMSettableTokenList interface: attribute value]
expected: FAIL
[CharacterData interface: calling replaceWith([object Object\],[object Object\]) on document.createComment("abc") with too few arguments must throw TypeError]
expected: FAIL
[Range interface object length]
expected: FAIL
[NodeIterator interface object length]
expected: FAIL
[Document interface: operation prepend([object Object\],[object Object\])]
expected: FAIL
[Document interface: operation append([object Object\],[object Object\])]
expected: FAIL
[DocumentFragment interface: operation prepend([object Object\],[object Object\])]
expected: FAIL
[DocumentFragment interface: operation append([object Object\],[object Object\])]
expected: FAIL
[DocumentType interface: operation before([object Object\],[object Object\])]
expected: FAIL
[DocumentType interface: operation after([object Object\],[object Object\])]
expected: FAIL
[DocumentType interface: operation replaceWith([object Object\],[object Object\])]
expected: FAIL
[Element interface: operation prepend([object Object\],[object Object\])]
expected: FAIL
[Element interface: operation append([object Object\],[object Object\])]
expected: FAIL
[Element interface: operation before([object Object\],[object Object\])]
expected: FAIL
[Element interface: operation after([object Object\],[object Object\])]
expected: FAIL
[Element interface: operation replaceWith([object Object\],[object Object\])]
expected: FAIL
[CharacterData interface: operation before([object Object\],[object Object\])]
expected: FAIL
[CharacterData interface: operation after([object Object\],[object Object\])]
expected: FAIL
[CharacterData interface: operation replaceWith([object Object\],[object Object\])]
expected: FAIL
[DOMTokenList interface: operation add(DOMString)]
expected: FAIL
[DOMTokenList interface: operation remove(DOMString)]
expected: FAIL

View file

@ -0,0 +1,3 @@
[CharacterData-deleteData.html]
type: testharness
expected: TIMEOUT

View file

@ -6,9 +6,6 @@
[If there are two imgs, a collection should be returned. (name)]
expected: FAIL
[If there are two imgs, nothing should be returned. (id)]
expected: FAIL
[If there are two imgs, the one with a name should be returned. (name and id)]
expected: FAIL

View file

@ -1179,12 +1179,6 @@
[Document interface: document.implementation.createDocument(null, "", null) must inherit property "all" with the proper type (81)]
expected: FAIL
[Document interface: calling prepend([object Object\],[object Object\]) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError]
expected: FAIL
[Document interface: calling append([object Object\],[object Object\]) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError]
expected: FAIL
[Document interface: document.implementation.createDocument(null, "", null) must inherit property "query" with the proper type (89)]
expected: FAIL
@ -2178,12 +2172,6 @@
[Element interface: calling removeAttributeNode(Attr) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling prepend([object Object\],[object Object\]) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling append([object Object\],[object Object\]) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[Element interface: document.createElement("noscript") must inherit property "query" with the proper type (33)]
expected: FAIL
@ -2196,15 +2184,6 @@
[Element interface: calling queryAll(DOMString) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling before([object Object\],[object Object\]) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling after([object Object\],[object Object\]) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[Element interface: calling replaceWith([object Object\],[object Object\]) on document.createElement("noscript") with too few arguments must throw TypeError]
expected: FAIL
[HTMLUnknownElement interface: existence and properties of interface object]
expected: FAIL
@ -5889,9 +5868,6 @@
[HTMLSelectElement interface: calling namedItem(DOMString) on document.createElement("select") with too few arguments must throw TypeError]
expected: FAIL
[HTMLSelectElement interface: calling remove(long) on document.createElement("select") with too few arguments must throw TypeError]
expected: FAIL
[HTMLSelectElement interface: document.createElement("select") must inherit property "selectedOptions" with the proper type (17)]
expected: FAIL
@ -6711,9 +6687,6 @@
[HTMLCanvasElement interface object length]
expected: FAIL
[HTMLCanvasElement interface: operation getContext(DOMString,any)]
expected: FAIL
[HTMLCanvasElement interface: operation probablySupportsContext(DOMString,any)]
expected: FAIL
@ -6729,9 +6702,6 @@
[HTMLCanvasElement interface: operation toBlob(FileCallback,DOMString,any)]
expected: FAIL
[HTMLCanvasElement interface: calling getContext(DOMString,any) on document.createElement("canvas") with too few arguments must throw TypeError]
expected: FAIL
[HTMLCanvasElement interface: document.createElement("canvas") must inherit property "probablySupportsContext" with the proper type (3)]
expected: FAIL
@ -6807,9 +6777,6 @@
[CanvasRenderingContext2D interface: operation fill(CanvasFillRule)]
expected: FAIL
[CanvasRenderingContext2D interface: operation stroke(Path2D)]
expected: FAIL
[CanvasRenderingContext2D interface: operation drawSystemFocusRing(Element)]
expected: FAIL
@ -6894,9 +6861,6 @@
[CanvasRenderingContext2D interface: attribute direction]
expected: FAIL
[CanvasRenderingContext2D interface: operation arcTo(unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double)]
expected: FAIL
[CanvasRenderingContext2D interface: operation arc(unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,boolean)]
expected: FAIL
@ -6939,12 +6903,6 @@
[CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "shadowColor" with the proper type (24)]
expected: FAIL
[CanvasRenderingContext2D interface: calling fill(Path2D,CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: calling stroke(Path2D) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "drawSystemFocusRing" with the proper type (33)]
expected: FAIL
@ -6978,9 +6936,6 @@
[CanvasRenderingContext2D interface: calling scrollPathIntoView(Path2D) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: calling clip(Path2D,CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "resetClip" with the proper type (41)]
expected: FAIL
@ -7026,12 +6981,6 @@
[CanvasRenderingContext2D interface: calling measureText(DOMString) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: calling drawImage(CanvasImageSource,unrestricted double,unrestricted double,unrestricted double,unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: calling drawImage(CanvasImageSource,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "addHitRegion" with the proper type (52)]
expected: FAIL
@ -7068,9 +7017,6 @@
[CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "direction" with the proper type (69)]
expected: FAIL
[CanvasRenderingContext2D interface: calling arcTo(unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError]
expected: FAIL
[CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "ellipse" with the proper type (79)]
expected: FAIL
@ -9477,3 +9423,21 @@
[Location interface: window.location must have own property "reload"]
expected: FAIL
[CanvasRenderingContext2D interface: operation fill(Path2D,CanvasFillRule)]
expected: FAIL
[CanvasRenderingContext2D interface: operation clip(Path2D,CanvasFillRule)]
expected: FAIL
[CanvasRenderingContext2D interface: operation drawImage(CanvasImageSource,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double,unrestricted double)]
expected: FAIL
[CanvasRenderingContext2D interface: operation createImageData(double,double)]
expected: FAIL
[CanvasRenderingContext2D interface: operation putImageData(ImageData,double,double,double,double,double,double)]
expected: FAIL
[WorkerGlobalScope interface: operation importScripts(DOMString)]
expected: FAIL

View file

@ -1125,18 +1125,6 @@
[img.lowsrc: IDL set to object "test-valueOf" followed by IDL get]
expected: FAIL
[img.hspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[img.hspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[img.vspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[img.vspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[img.longDesc: setAttribute() to "" followed by IDL get]
expected: FAIL
@ -7347,9 +7335,6 @@
[object.hspace: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[object.hspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[object.hspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -7662,9 +7647,6 @@
[object.vspace: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[object.vspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[object.vspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -11310,9 +11292,6 @@
[video.width: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[video.width: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[video.width: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -11496,9 +11475,6 @@
[video.height: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[video.height: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[video.height: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -16977,24 +16953,12 @@
[canvas.width: setAttribute() to 4294967295 followed by IDL get]
expected: FAIL
[canvas.width: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[canvas.width: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[canvas.height: setAttribute() to 2147483648 followed by IDL get]
expected: FAIL
[canvas.height: setAttribute() to 4294967295 followed by IDL get]
expected: FAIL
[canvas.height: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[canvas.height: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[canvas.itemScope: typeof IDL attribute]
expected: FAIL

View file

@ -5268,9 +5268,6 @@
[input.maxLength: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[input.maxLength: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[input.maxLength: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -5766,12 +5763,6 @@
[input.required: IDL set to object "test-valueOf" followed by IDL get]
expected: FAIL
[input.size: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[input.size: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[input.src: typeof IDL attribute]
expected: FAIL
@ -8226,12 +8217,6 @@
[select.required: IDL set to object "test-valueOf" followed by IDL get]
expected: FAIL
[select.size: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[select.size: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[select.itemScope: typeof IDL attribute]
expected: FAIL
@ -11505,12 +11490,6 @@
[textarea.autofocus: IDL set to object "test-valueOf" followed by IDL get]
expected: FAIL
[textarea.cols: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[textarea.cols: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[textarea.dirName: typeof IDL attribute]
expected: FAIL
@ -12396,9 +12375,6 @@
[textarea.maxLength: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[textarea.maxLength: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[textarea.maxLength: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -12420,12 +12396,6 @@
[textarea.maxLength: IDL set to 2147483647 followed by getAttribute()]
expected: FAIL
[textarea.rows: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[textarea.rows: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[textarea.itemScope: typeof IDL attribute]
expected: FAIL

View file

@ -2835,9 +2835,6 @@
[pre.width: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[pre.width: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[pre.width: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -4755,9 +4752,6 @@
[ol.start: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[ol.start: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[ol.start: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -6876,9 +6870,6 @@
[li.value: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[li.value: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[li.value: setAttribute() to object "3" followed by IDL get]
expected: FAIL

View file

@ -1431,9 +1431,6 @@
[applet.hspace: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[applet.hspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[applet.hspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -1911,9 +1908,6 @@
[applet.vspace: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[applet.vspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[applet.vspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -3474,9 +3468,6 @@
[marquee.hspace: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[marquee.hspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[marquee.hspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -3660,9 +3651,6 @@
[marquee.scrollAmount: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[marquee.scrollAmount: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[marquee.scrollAmount: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -3846,9 +3834,6 @@
[marquee.scrollDelay: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[marquee.scrollDelay: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[marquee.scrollDelay: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -4140,9 +4125,6 @@
[marquee.vspace: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[marquee.vspace: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[marquee.vspace: setAttribute() to object "3" followed by IDL get]
expected: FAIL

View file

@ -3480,9 +3480,6 @@
[colgroup.span: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[colgroup.span: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[colgroup.span: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -5031,9 +5028,6 @@
[col.span: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[col.span: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[col.span: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -11544,12 +11538,6 @@
[td.tabIndex: IDL set to -2147483648 followed by getAttribute()]
expected: FAIL
[td.colSpan: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[td.colSpan: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[td.rowSpan: typeof IDL attribute]
expected: FAIL
@ -11712,9 +11700,6 @@
[td.rowSpan: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[td.rowSpan: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[td.rowSpan: setAttribute() to object "3" followed by IDL get]
expected: FAIL
@ -13737,12 +13722,6 @@
[th.tabIndex: IDL set to -2147483648 followed by getAttribute()]
expected: FAIL
[th.colSpan: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[th.colSpan: setAttribute() to object "3" followed by IDL get]
expected: FAIL
[th.rowSpan: typeof IDL attribute]
expected: FAIL
@ -13905,9 +13884,6 @@
[th.rowSpan: setAttribute() to object "2" followed by IDL get]
expected: FAIL
[th.rowSpan: setAttribute() to object "3" followed by getAttribute()]
expected: FAIL
[th.rowSpan: setAttribute() to object "3" followed by IDL get]
expected: FAIL

View file

@ -1,5 +0,0 @@
[table-width-150percent.html]
type: reftest
reftype: ==
refurl: /html/rendering/non-replaced-elements/tables/table-width-150percent-ref.html
expected: PASS

View file

@ -1 +1 @@
7ee605db117bfc96ef145a1c77d43b704baeacb2
b3b9deafa7ed87bd0649849f3aa729f21c4ff45d

View file

@ -75,9 +75,6 @@
[WorkerGlobalScope interface: self must inherit property "ononline" with the proper type (6)]
expected: FAIL
[WorkerGlobalScope interface: calling importScripts(DOMString) on self with too few arguments must throw TypeError]
expected: FAIL
[WorkerNavigator interface object length]
expected: FAIL
@ -147,3 +144,6 @@
[WorkerNavigator interface: self.navigator must inherit property "onLine" with the proper type (8)]
expected: FAIL
[WorkerGlobalScope interface: operation importScripts(DOMString)]
expected: FAIL

View file

@ -1,5 +0,0 @@
[incoming-message.html]
type: testharness
[close() and incoming message]
expected: FAIL

View file

@ -1,5 +0,0 @@
[setInterval.html]
type: testharness
[close() and setInterval]
expected: FAIL

View file

@ -1,5 +0,0 @@
[setTimeout.html]
type: testharness
[close() and setTimeout]
expected: FAIL

View file

@ -16,7 +16,7 @@ is ongoing that will affect a number of the following tests.</strong>
<script>
test(function() {
assert_true("Blob" in window, "window should have a Blob property.");
assert_equals(Blob.length, 2, "Blob.length should be 2.");
assert_equals(Blob.length, 0, "Blob.length should be 0.");
assert_true(Blob instanceof Function, "Blob should be a function.");
}, "Blob interface object");

View file

@ -16,7 +16,7 @@
var open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
db = event.target.result;
db = e.target.result;
var store = db.createObjectStore("test", {keyPath:"pKey"});
store.createIndex("idx", "iKey");

View file

@ -16,7 +16,7 @@
var open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
db = event.target.result;
db = e.target.result;
var store = db.createObjectStore("test", {keyPath:"pKey"});
for(var i = 0; i < records.length; i++) {

View file

@ -29,7 +29,7 @@ open_rq.onsuccess = function(e) {
upgradeneeded_fired = counter++;
});
rq.onsuccess = t.step_func(function (e) {
assert_equals(versionchange_fired, 0, 'block event fired #')
assert_equals(versionchange_fired, 0, 'versionchange event fired #')
assert_equals(blocked_fired, 1, 'block event fired #')
assert_equals(upgradeneeded_fired, 2, 'second upgradeneeded event fired #')

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBDatabase.createObjectStore() - Attampt Create Exsists Object Store With Difference keyPath throw ConstraintError </title>
<title>IDBDatabase.createObjectStore() - attempting to create an existing object store with a different keyPath throw ConstraintError </title>
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBDatabase-createObjectStore-IDBObjectStore-DOMString-name-IDBObjectStoreParameters-optionalParameters">
<script src="/resources/testharness.js"></script>

View file

@ -47,7 +47,7 @@ should_throw({
function should_work(val) {
var t = async_test("Calling open() with version argument 1.5 should not throw.")
var rq = createdb(t)
var rq = createdb(t, val)
rq.onupgradeneeded = function() {
t.done()
}

View file

@ -25,11 +25,14 @@
txn.objectStore("store")
.openCursor().onsuccess = this.step_func(function(e)
{
if (e.target.result)
if (e.target.result) {
count += 1;
e.target.result.continue()
}
})
txn.oncomplete = this.step_func(function() {
assert_equals(count, 100);
this.done()
})
}

View file

@ -7,7 +7,6 @@
<script src=support.js></script>
<script>
// TODO XXX DO THE IDBTransaction abort test here here
var db, aborted,
t = async_test(document.title, {timeout: 10000}),
record = { indexedProperty: "bar" };

View file

@ -36,7 +36,7 @@
// Errors
db.onerror = fail(t, "db.error");
db.abort = fail(t, "db.abort");
db.onabort = fail(t, "db.abort");
setTimeout(t.step_func(deleteDB), 10);
});

View file

@ -1,64 +0,0 @@
<!--
Test converted from WebKit:
http://trac.webkit.org/browser/trunk/LayoutTests/storage/indexeddb/resources/interfaces.js
-->
<!DOCTYPE html>
<!-- Submitted from TestTWF Paris -->
<meta charset=utf-8>
<title>Test IndexedDB's interfaces</title>
<link rel=author href="mailto:romain.huet@gmail.com" title="Romain Huet">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js></script>
<script>
test(function() {
assert_true('IDBCursor' in self);
}, "Test IDBCursor");
test(function() {
assert_true('IDBCursorWithValue' in self);
}, "Test IDBCursorWithValue");
test(function() {
assert_true('IDBDatabase' in self);
}, "Test IDBDatabase");
test(function() {
assert_true('IDBFactory' in self);
}, "Test IDBFactory");
test(function() {
assert_true('IDBIndex' in self);
}, "Test IDBIndex");
test(function() {
assert_true('IDBKeyRange' in self);
}, "Test IDBKeyRange");
test(function() {
assert_true('IDBObjectStore' in self);
}, "Test IDBObjectStore");
test(function() {
assert_true('IDBOpenDBRequest' in self);
}, "Test IDBOpenDBRequest");
test(function() {
assert_true('IDBRequest' in self);
}, "Test IDBRequest");
test(function() {
assert_true('IDBTransaction' in self);
}, "Test IDBTransaction");
test(function() {
assert_true('IDBVersionChangeEvent' in self);
}, "Test IDBVersionChangeEvent");
</script>
<div id=log></div>

View file

@ -267,7 +267,7 @@ GitHub UI. Below is one method and others can be found on
4. Wait for feedback on your pull request and once your pull request is
accepted, detele youre branch (see '
accepted, delete your branch (see '
[When Pull Request is Accepted][cleanup]').
That's it! If you're currently at a Test the Web Forward event, find an

View file

@ -14,8 +14,18 @@ function testNode(create, type) {
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 10) })
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 0) })
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 10) })
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 0) })
}, type + ".deleteData() out of bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(0, 2)
assert_equals(node.data, "st")
}, type + ".deleteData() at the start")
test(function() {
var node = create()
assert_equals(node.data, "test")
@ -32,6 +42,33 @@ function testNode(create, type) {
assert_equals(node.data, "tst")
}, type + ".deleteData() in the middle")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(2, 0)
assert_equals(node.data, "test")
node.deleteData(0, 0)
assert_equals(node.data, "test")
}, type + ".deleteData() with zero count")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(2, -1)
assert_equals(node.data, "te")
}, type + ".deleteData() with small negative count")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(1, -0x100000000 + 2)
assert_equals(node.data, "tt")
}, type + ".deleteData() with large negative count")
test(function() {
var node = create()
node.data = "This is the character data test, append more 資料,更多測試資料";

View file

@ -16,6 +16,38 @@ function testNode(create, type) {
assert_throws("INDEX_SIZE_ERR", function() { node.insertData(5, "") })
}, type + ".insertData() out of bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
assert_throws("INDEX_SIZE_ERR", function() { node.insertData(-1, "x") })
assert_throws("INDEX_SIZE_ERR", function() { node.insertData(-0x100000000 + 5, "x") })
}, type + ".insertData() negative out of bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.insertData(-0x100000000 + 2, "X")
assert_equals(node.data, "teXst")
}, type + ".insertData() negative in bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.insertData(0, "")
assert_equals(node.data, "test")
}, type + ".insertData('')")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.insertData(0, "X")
assert_equals(node.data, "Xtest")
}, type + ".insertData() at the start")
test(function() {
var node = create()
assert_equals(node.data, "test")

View file

@ -0,0 +1,53 @@
<!doctype html>
<meta charset=utf-8>
<title>Text.splitText()</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-text-splittextoffset">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
var text = document.createTextNode("camembert");
assert_throws("INDEX_SIZE_ERR", function () { text.splitText(10) });
}, "Split text after end of data");
test(function() {
var text = document.createTextNode("");
var new_text = text.splitText(0);
assert_equals(text.data, "");
assert_equals(new_text.data, "");
}, "Split empty text");
test(function() {
var text = document.createTextNode("comté");
var new_text = text.splitText(0);
assert_equals(text.data, "");
assert_equals(new_text.data, "comté");
}, "Split text at beginning");
test(function() {
var text = document.createTextNode("comté");
var new_text = text.splitText(5);
assert_equals(text.data, "comté");
assert_equals(new_text.data, "");
}, "Split text at end");
test(function() {
var text = document.createTextNode("comté");
var new_text = text.splitText(3);
assert_equals(text.data, "com");
assert_equals(new_text.data, "té");
assert_equals(new_text.parentNode, null);
}, "Split root");
test(function() {
var parent = document.createElement('div');
var text = document.createTextNode("bleu");
parent.appendChild(text);
var new_text = text.splitText(2);
assert_equals(text.data, "bl");
assert_equals(new_text.data, "eu");
assert_equals(text.nextSibling, new_text);
assert_equals(new_text.parentNode, parent);
}, "Split child");
</script>

View file

@ -0,0 +1,3 @@
def main(request, response):
response.headers.set("Content-Type", "text/plain;charset=" + request.GET.first("label"))
response.content = "hello encoding"

View file

@ -86,7 +86,7 @@
async_test(function(t) {
var frame = document.createElement("iframe"),
name = compatibility_names[encoding.name] || encoding.name;
frame.src = "resources/single-byte-raw.py?label=" + label
frame.src = "resources/text-plain-charset.py?label=" + label
frame.onload = t.step_func_done(function() {
assert_equals(frame.contentDocument.characterSet, name)
assert_equals(frame.contentDocument.inputEncoding, name)

View file

@ -63,9 +63,7 @@ test(function() {
assert_equals(img2.id, "test4");
assert_false("test4" in document, '"test4" in document should be false');
var collection = document.test4;
assert_class_string(collection, "HTMLCollection", "collection should be an HTMLCollection");
assert_array_equals(collection, [img1, img2]);
assert_equals(document.test4, undefined);
}, "If there are two imgs, nothing should be returned. (id)");
test(function() {

View file

@ -373,7 +373,7 @@ ReflectionTests.typeMap = {
{toString:function() {return 2;}, valueOf: null},
{valueOf:function() {return 3;}}],
"domExpected": function(val) {
var parsed = ReflectionTests.parseNonneg(val + "");
var parsed = ReflectionTests.parseNonneg(String(val));
if (parsed === false || parsed > maxInt || parsed < minInt) {
return null;
}
@ -409,7 +409,7 @@ ReflectionTests.typeMap = {
{toString:function() {return 2;}, valueOf: null},
{valueOf:function() {return 3;}}],
"domExpected": function(val) {
var parsed = ReflectionTests.parseNonneg(val + "");
var parsed = ReflectionTests.parseNonneg(String(val));
// Note maxInt, not maxUnsigned.
if (parsed === false || parsed < 0 || parsed > maxInt) {
return null;
@ -450,7 +450,7 @@ ReflectionTests.typeMap = {
{toString:function() {return 2;}, valueOf: null},
{valueOf:function() {return 3;}}],
"domExpected": function(val) {
var parsed = ReflectionTests.parseNonneg(val + "");
var parsed = ReflectionTests.parseNonneg(String(val));
// Note maxInt, not maxUnsigned.
if (parsed === false || parsed < 1 || parsed > maxInt) {
return null;
@ -696,7 +696,7 @@ ReflectionTests.doReflects = function(data, idlName, idlObj, domName, domObj) {
}
try {
domObj.setAttribute(domName, domTests[i]);
ReflectionHarness.test(domObj.getAttribute(domName), domTests[i] + "", "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by getAttribute()");
ReflectionHarness.test(domObj.getAttribute(domName), String(domTests[i]), "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by getAttribute()");
ReflectionHarness.test(idlObj[idlName], domExpected[i], "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by IDL get");
if (ReflectionHarness.catchUnexpectedExceptions) {
ReflectionHarness.success();

View file

@ -10,18 +10,18 @@
<script src="/resources/testharnessreport.js"></script>
<meta name='flags' content='dom'>
<style type='text/css'>
#colonlangcontroltest { color: red; font-weight: bold; width: 400px; }
#colonlangcontroltest:lang(xx) { display:none; }
#colonlangcontroltest { color: red; font-weight: bold; width: 400px; }
#colonlangcontroltest:lang(xx) { display:none; }
.test div { width: 50px; }
#box:lang(ko) { width: 100px; }
#box:lang(zh) { width: 100px; }
#box:lang(ja) { width: 100px; }
/* styling for debugging related notes */
.notes span:lang(ko) { background-color: #0000FF; color: white; padding: 0 5px; }
.notes span:lang(zh) { background-color: #0000FF; color: white; padding: 0 5px; }
.notes span:lang(ja) { background-color: #0000FF; color: white; padding: 0 5px; }
/* styling for debugging related notes */
.notes span:lang(ko) { background-color: #0000FF; color: white; padding: 0 5px; }
.notes span:lang(zh) { background-color: #0000FF; color: white; padding: 0 5px; }
.notes span:lang(ja) { background-color: #0000FF; color: white; padding: 0 5px; }
</style>
</head>

View file

@ -4,9 +4,9 @@
<head>
<title>Pattern Attribute</title>
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-pattern">
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-pattern">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
@ -14,20 +14,20 @@
<body>
<h1>Pattern Attribute</h1>
<div style="display: none">
<input pattern="[a-z]{3}" value="abcd" title="three letters max"/>
</div>
<h1>Pattern Attribute</h1>
<div style="display: none">
<input pattern="[a-z]{3}" value="abcd" title="three letters max"/>
</div>
<div id="log">
</div>
<script type="text/javascript">
<script type="text/javascript">
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("pattern"), "[a-z]{3}")}, "pattern attribute support on input element");
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("pattern"), "[a-z]{3}")}, "pattern attribute support on input element");
</script>
</script>
</body>

View file

@ -4,9 +4,9 @@
<head>
<title>Required Attribute</title>
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-required">
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-required">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
@ -14,20 +14,20 @@
<body>
<h1>Required Attribute</h1>
<div style="display: none">
<input type="text" required="required" />
</div>
<h1>Required Attribute</h1>
<div style="display: none">
<input type="text" required="required" />
</div>
<div id="log">
</div>
<script type="text/javascript">
<script type="text/javascript">
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("required"), "required")}, "required attribute support on input element");
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("required"), "required")}, "required attribute support on input element");
</script>
</script>
</body>

View file

@ -4,9 +4,9 @@
<head>
<title>Search Input</title>
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
@ -14,21 +14,21 @@
<body>
<h1>Search Input</h1>
<input type="search" style="display:none" placeholder="Search..." />
<h1>Search Input</h1>
<input type="search" style="display:none" placeholder="Search..." />
<div id="log">
</div>
<script type="text/javascript">
<script type="text/javascript">
test(function() {assert_equals(document.getElementsByTagName("input")[0].type, "search")}, "search type support on input element", {
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-type" });
test(function() {assert_equals(document.getElementsByTagName("input")[0].placeholder, "Search...")}, "placeholder attribute support on input element", {
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-placeholder" });
test(function() {assert_equals(document.getElementsByTagName("input")[0].type, "search")}, "search type support on input element", {
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-type" });
test(function() {assert_equals(document.getElementsByTagName("input")[0].placeholder, "Search...")}, "placeholder attribute support on input element", {
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-placeholder" });
</script>
</script>
</body>

View file

@ -1,84 +1,84 @@
<!DOCTYPE html>
<html>
<head>
<title>Input tel</title>
<link rel="author" title="Kazuki Kanamori" href="mailto:yogurito@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#telephone-state-(type=tel)">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<title>Input tel</title>
<link rel="author" title="Kazuki Kanamori" href="mailto:yogurito@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#telephone-state-(type=tel)">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>Input tel</h1>
<input type="tel" id="novalue" />
<input type="tel" id="value_with_LF" value="0&#x000A;1" />
<input type="tel" id="value_with_CR" value="0&#x000D;1" />
<input type="tel" id="value_with_CRLF" value="0&#x000A;&#x000D;1" />
<div id="log">
</div>
<h1>Input tel</h1>
<input type="tel" id="novalue" />
<input type="tel" id="value_with_LF" value="0&#x000A;1" />
<input type="tel" id="value_with_CR" value="0&#x000D;1" />
<input type="tel" id="value_with_CRLF" value="0&#x000A;&#x000D;1" />
<div id="log">
</div>
<script type="text/javascript">
var element = document.getElementById('novalue');
test(function(){
assert_equals(element.type, 'tel');
}, 'tel type supported on input element');
test(function(){
element.value = '0\u000A1';
assert_equals(element.value, '01');
}, 'User agents must not allow users to insert "LF" (U+000A)');
test(function(){
element.value = '0\u000D1';
assert_equals(element.value, '01');
}, 'User agents must not allow users to insert "CR" (U+000D)');
<script type="text/javascript">
var element = document.getElementById('novalue');
test(function(){
assert_equals(element.type, 'tel');
}, 'tel type supported on input element');
test(function(){
element.value = '0\u000A1';
assert_equals(element.value, '01');
}, 'User agents must not allow users to insert "LF" (U+000A)');
test(function(){
element.value = '0\u000D1';
assert_equals(element.value, '01');
}, 'User agents must not allow users to insert "CR" (U+000D)');
element = document.getElementById('value_with_LF');
test(function(){
assert_equals(element.value, '01');
}, 'The value attribute, if specified, must have a value that contains no "LF" (U+000A)');
element = document.getElementById('value_with_LF');
test(function(){
assert_equals(element.value, '01');
}, 'The value attribute, if specified, must have a value that contains no "LF" (U+000A)');
element = document.getElementById('value_with_CR');
test(function(){
assert_equals(element.value, '01');
}, 'The value attribute, if specified, must have a value that contains no "CR" (U+000D)');
element = document.getElementById('value_with_CR');
test(function(){
assert_equals(element.value, '01');
}, 'The value attribute, if specified, must have a value that contains no "CR" (U+000D)');
test(function(){
element = document.getElementById('novalue');
element.value = '0\u000D\u000A1';
assert_equals(element.value, '01');
test(function(){
element = document.getElementById('novalue');
element.value = '0\u000D\u000A1';
assert_equals(element.value, '01');
element = document.getElementById('value_with_CRLF');
assert_equals(element.value, '01');
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
element = document.getElementById('value_with_CRLF');
assert_equals(element.value, '01');
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
element = document.getElementById('novalue');
test(function(){
element.value = '+811234';
assert_equals(element.value, '+811234');
}, 'Element can accept the phone number with plus sign(country code)');
test(function(){
element.value = '1234#5678';
assert_equals(element.value, '1234#5678');
}, 'Element can accept the phone number with hash mark(extension number)');
test(function(){
element.value = '123-456-789';
assert_equals(element.value, '123-456-789');
}, 'Element can accept the phone number with hyphen');
test(function(){
element.value = '123.456.789';
assert_equals(element.value, '123.456.789');
}, 'Element can accept the phone number with dots');
test(function(){
element.value = '1 23 4';
assert_equals(element.value, '1 23 4');
}, 'Element can accept the phone number with whitespace');
test(function(){
element.value = ' 1234 ';
assert_equals(element.value, ' 1234 ');
}, 'Element can accept the phone number with leading & following whitespaces');
test(function(){
element.value = '(03)12345678';
assert_equals(element.value, '(03)12345678');
}, 'Element can accept the phone number with parentheses(area code)');
</script>
element = document.getElementById('novalue');
test(function(){
element.value = '+811234';
assert_equals(element.value, '+811234');
}, 'Element can accept the phone number with plus sign(country code)');
test(function(){
element.value = '1234#5678';
assert_equals(element.value, '1234#5678');
}, 'Element can accept the phone number with hash mark(extension number)');
test(function(){
element.value = '123-456-789';
assert_equals(element.value, '123-456-789');
}, 'Element can accept the phone number with hyphen');
test(function(){
element.value = '123.456.789';
assert_equals(element.value, '123.456.789');
}, 'Element can accept the phone number with dots');
test(function(){
element.value = '1 23 4';
assert_equals(element.value, '1 23 4');
}, 'Element can accept the phone number with whitespace');
test(function(){
element.value = ' 1234 ';
assert_equals(element.value, ' 1234 ');
}, 'Element can accept the phone number with leading & following whitespaces');
test(function(){
element.value = '(03)12345678';
assert_equals(element.value, '(03)12345678');
}, 'Element can accept the phone number with parentheses(area code)');
</script>
</body>
</html>

View file

@ -4,43 +4,43 @@
<head>
<title>Input Time</title>
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>Input Time</h1>
<div style="display:none;">
<input type="time "id="chkDefaultValue" />
<input type="time" id="chkStep" />
<input type="time" id="chkSetValueTest" />
<input type="time" id="chkSupportAttribute" min="01:01:01.001" max="12:12:12.012" step="600" />
</div>
<div id="log">
<h1>Input Time</h1>
<div style="display:none;">
<input type="time "id="chkDefaultValue" />
<input type="time" id="chkStep" />
<input type="time" id="chkSetValueTest" />
<input type="time" id="chkSupportAttribute" min="01:01:01.001" max="12:12:12.012" step="600" />
</div>
<div id="log">
</div>
<script type="text/javascript">
<script type="text/javascript">
/* check default value */
test(function(){ assert_equals(document.getElementById("chkDefaultValue").value, "");
}, "time element of default time value");
test(function(){assert_equals(document.getElementById('chkStep').step, "");
} , "step attribute on default value check");
}, "step attribute on default value check");
test(function(){assert_equals(document.getElementById('chkDefaultValue').max, "");
} , "max attribute on default value check")
}, "max attribute on default value check")
test(function(){assert_equals(document.getElementById('chkDefaultValue').max, "");
} , "min attribute on default value check")
}, "min attribute on default value check")
/* simple attribute test*/
test(function(){assert_equals(document.getElementById("chkSupportAttribute").type,"time");}
, "type attribute support on input element");
, "type attribute support on input element");
test(function(){assert_equals(document.getElementById('chkSupportAttribute').min, "01:01:01.001")}
, "max attribute support on input element");
, "max attribute support on input element");
test(function(){assert_equals(document.getElementById('chkSupportAttribute').max, "12:12:12.012")}
, "min attribute support on input element");
, "min attribute support on input element");
test(function(){assert_equals(document.getElementById("chkSupportAttribute").step, "600")}
, "step attribute support on input element");
, "step attribute support on input element");
/* check step up and down */
var _StepTest = document.getElementById("chkStep");
@ -48,160 +48,160 @@ test(function(){ assert_true(typeof(_StepTest.stepUp) ==="function" ) } , "ste
test(function(){ assert_true(typeof(_StepTest.stepDown) ==="function" ) } , "stepDown function support on input Element");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "";
_StepTest.stepUp();
assert_equals(_StepTest.value,"12:01");
_StepTest.value = "12:00";
_StepTest.step = "";
_StepTest.stepUp();
assert_equals(_StepTest.value,"12:01");
} , "stepUp step value empty on default step value ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "";
_StepTest.stepDown();
assert_equals(_StepTest.value,"11:59");
_StepTest.value = "12:00";
_StepTest.step = "";
_StepTest.stepDown();
assert_equals(_StepTest.value,"11:59");
}, "stepDown step value empty default step value");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "-600";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:01");
_StepTest.value = "12:00";
_StepTest.step = "-600";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:01");
},"stepUp on step value minus");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "-600";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59");
_StepTest.value = "12:00";
_StepTest.step = "-600";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59");
},"stepDown on step value minus");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "0";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:01");
_StepTest.value = "12:00";
_StepTest.step = "0";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:01");
} , "stepUp on step value zero ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "0";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59");
_StepTest.value = "12:00";
_StepTest.step = "0";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59");
} , "stepDown on step value zero ");
test(function(){
_StepTest.value = "00:00";
_StepTest.step = "86399";
_StepTest.stepUp();
assert_equals(_StepTest.value, "23:59:59");
_StepTest.value = "00:00";
_StepTest.step = "86399";
_StepTest.stepUp();
assert_equals(_StepTest.value, "23:59:59");
} , "stepUp on step value 24 hour");
test(function(){
_StepTest.value = "23:59:59";
_StepTest.step = "86399";
_StepTest.stepDown();
assert_equals(_StepTest.value, "00:00:00");
_StepTest.value = "23:59:59";
_StepTest.step = "86399";
_StepTest.stepDown();
assert_equals(_StepTest.value, "00:00:00");
} , "stepDown on step value 24 hour ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "3600";
_StepTest.stepUp();
assert_equals(_StepTest.value, "13:00");
_StepTest.value = "12:00";
_StepTest.step = "3600";
_StepTest.stepUp();
assert_equals(_StepTest.value, "13:00");
} , "stepUp on step value hour ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "3600";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:00");
_StepTest.value = "12:00";
_StepTest.step = "3600";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:00");
} , "stepDown on step value hour ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "1";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:00:01");
_StepTest.value = "12:00";
_StepTest.step = "1";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:00:01");
} , "stepUp on step value second ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "1";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59:59");
_StepTest.value = "12:00";
_StepTest.step = "1";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59:59");
} , "stepDown on step value second ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "0.001";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:00:00.001");
_StepTest.value = "12:00";
_StepTest.step = "0.001";
_StepTest.stepUp();
assert_equals(_StepTest.value, "12:00:00.001");
} , "stepUp on step value miri second ");
test(function(){
_StepTest.value = "12:00";
_StepTest.step = "0.001";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59:59.999");
_StepTest.value = "12:00";
_StepTest.step = "0.001";
_StepTest.stepDown();
assert_equals(_StepTest.value, "11:59:59.999");
} , "stepDown on step value miri second ");
test(function(){
_StepTest.value = "13:00:00";
_StepTest.step = "1";
_StepTest.stepUp(2);
assert_equals(_StepTest.value, "13:00:02");
_StepTest.value = "13:00:00";
_StepTest.step = "1";
_StepTest.stepUp(2);
assert_equals(_StepTest.value, "13:00:02");
}, "stepUp argment 2 times");
test(function(){
_StepTest.value = "13:00:00";
_StepTest.step = "1";
_StepTest.stepDown(2);
assert_equals(_StepTest.value, "12:59:58");
_StepTest.value = "13:00:00";
_StepTest.step = "1";
_StepTest.stepDown(2);
assert_equals(_StepTest.value, "12:59:58");
}, "stepDown argment 2 times");
test(function(){
_StepTest.max = "15:00";
_StepTest.value = "15:00";
_StepTest.stepUp();
assert_equals(_StepTest.value, "15:00");
_StepTest.max = "";
_StepTest.max = "15:00";
_StepTest.value = "15:00";
_StepTest.stepUp();
assert_equals(_StepTest.value, "15:00");
_StepTest.max = "";
} , "stepUp stop because it exceeds the maximum value");
test(function(){
_StepTest.min = "13:00";
_StepTest.value = "13:00";
_StepTest.stepDown();
assert_equals(_StepTest.value, "13:00");
_StepTest.min="";
_StepTest.min = "13:00";
_StepTest.value = "13:00";
_StepTest.stepDown();
assert_equals(_StepTest.value, "13:00");
_StepTest.min="";
} , "stepDown Stop so lower than the minimum value");
test(function(){
_StepTest.max = "15:01";
_StepTest.value = "15:00";
_StepTest.step = "120";
_StepTest.stepUp();
assert_equals(_StepTest.value, "15:01");
_StepTest.max = "";
_StepTest.max = "15:01";
_StepTest.value = "15:00";
_StepTest.step = "120";
_StepTest.stepUp();
assert_equals(_StepTest.value, "15:01");
_StepTest.max = "";
} , "stop at border on stepUp");
test(function(){
_StepTest.min = "12:59";
_StepTest.value = "13:00";
_StepTest.step = "120";
_StepTest.stepDown();
assert_equals(_StepTest.value, "12:59");
_StepTest.min="";
_StepTest.min = "12:59";
_StepTest.value = "13:00";
_StepTest.step = "120";
_StepTest.stepDown();
assert_equals(_StepTest.value, "12:59");
_StepTest.min="";
} , "stop at border on stepDown");
test(function(){
_StepTest.value = "";
_StepTest.step = "60";
_StepTest.value = "";
_StepTest.step = "60";
_StepTest.stepUp();
assert_equals(_StepTest.value, "00:01");
assert_equals(_StepTest.value, "00:01");
} , " empty value of stepUp");
/* set value test */
test(function(){
var _time = document.getElementById("chkSetValueTest");
_time.value = "12:00:00.000";
assert_equals(_time.value, "12:00:00.000");
_time.value = "hh:mi:ss.sss";
assert_equals(_time.value, "");
var _time = document.getElementById("chkSetValueTest");
_time.value = "12:00:00.000";
assert_equals(_time.value, "12:00:00.000");
_time.value = "hh:mi:ss.sss";
assert_equals(_time.value, "");
}, "set value on not time format value");
</script>
</script>
</body>
</html>

View file

@ -1,59 +1,59 @@
<!DOCTYPE html>
<html>
<head>
<title>Input url</title>
<link rel="author" title="Hyeonseok Shin" href="mailto:hyeonseok@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#url-state-%28type=url%29">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<title>Input url</title>
<link rel="author" title="Hyeonseok Shin" href="mailto:hyeonseok@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#url-state-%28type=url%29">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>Input url</h1>
<div style="display: none">
<input type="url" id="type_support" />
<input type="url" id="set_value_LF" />
<input type="url" id="set_value_CR" />
<input type="url" id="set_value_CRLF" />
<input type="url" id="value_with_CRLF" value="a&#x000D;&#x000A;a" />
<input type="url" id="value_with_leading_trailing_white_space" value=" aa " />
<input type="url" id="value_with_leading_trailing_inner_white_space" value=" a a " />
</div>
<div id="log">
</div>
<h1>Input url</h1>
<div style="display: none">
<input type="url" id="type_support" />
<input type="url" id="set_value_LF" />
<input type="url" id="set_value_CR" />
<input type="url" id="set_value_CRLF" />
<input type="url" id="value_with_CRLF" value="a&#x000D;&#x000A;a" />
<input type="url" id="value_with_leading_trailing_white_space" value=" aa " />
<input type="url" id="value_with_leading_trailing_inner_white_space" value=" a a " />
</div>
<div id="log">
</div>
<script type="text/javascript">
test(function(){
var element = document.getElementById('type_support');
assert_equals(element.type, 'url');
}, 'url type supported on input element');
<script type="text/javascript">
test(function(){
var element = document.getElementById('type_support');
assert_equals(element.type, 'url');
}, 'url type supported on input element');
test(function(){
var element = document.getElementById('set_value_LF');
element.value = 'a\u000Aa';
assert_equals(element.value, 'aa');
test(function(){
var element = document.getElementById('set_value_LF');
element.value = 'a\u000Aa';
assert_equals(element.value, 'aa');
element = document.getElementById('set_value_CR');
element.value = 'a\u000Da';
assert_equals(element.value, 'aa');
element = document.getElementById('set_value_CR');
element.value = 'a\u000Da';
assert_equals(element.value, 'aa');
element = document.getElementById('set_value_CRLF');
element.value = 'a\u000D\u000Aa';
assert_equals(element.value, 'aa');
}, 'The value must not be set with "LF" (U+000A) or "CR" (U+000D)');
element = document.getElementById('set_value_CRLF');
element.value = 'a\u000D\u000Aa';
assert_equals(element.value, 'aa');
}, 'The value must not be set with "LF" (U+000A) or "CR" (U+000D)');
test(function(){
var element = document.getElementById('value_with_CRLF');
assert_equals(element.value, 'aa');
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
test(function(){
var element = document.getElementById('value_with_CRLF');
assert_equals(element.value, 'aa');
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
test(function(){
var element = document.getElementById('value_with_leading_trailing_white_space');
assert_equals(element.value, 'aa');
test(function(){
var element = document.getElementById('value_with_leading_trailing_white_space');
assert_equals(element.value, 'aa');
element = document.getElementById('value_with_leading_trailing_inner_white_space');
assert_equals(element.value, 'a a');
}, 'The value sanitization algorithm is as follows: Strip leading and trailing whitespace from the value.');
</script>
element = document.getElementById('value_with_leading_trailing_inner_white_space');
assert_equals(element.value, 'a a');
}, 'The value sanitization algorithm is as follows: Strip leading and trailing whitespace from the value.');
</script>
</body>
</html>

View file

@ -1,14 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Template tag with children div tags inside</title>
<title>Template tag with children div tags inside</title>
<link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"/>
</head>
<body>
<p>Template tag with div tags inside</p>
<template>
<div>This is div inside template</div>
<div>This is another div inside template</div>
</template>
<p>Template tag with div tags inside</p>
<template>
<div>This is div inside template</div>
<div>This is another div inside template</div>
</template>
</body>
</html>

View file

@ -1,16 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Template tag with children div tags inside another template tag</title>
<title>Template tag with children div tags inside another template tag</title>
<link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"/>
</head>
<body>
<p>Template tag with children div tags inside another template tag</p>
<template>
<template>
<div>This is div inside template</div>
<div>This is another div inside template</div>
</template>
</template>
<p>Template tag with children div tags inside another template tag</p>
<template>
<template>
<div>This is div inside template</div>
<div>This is another div inside template</div>
</template>
</template>
</body>
</html>

View file

@ -1,56 +1,56 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Creating and deleting captions</title>
<link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<title>Creating and deleting captions</title>
<link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<table id="table1" style="display:none">
<caption id="caption1">caption</caption>
<tr>
<td>cell</td>
<td>cell</td>
</tr>
</table>
<table id="table2" style="display:none">
<tr>
<td>cell</td>
<td>cell</td>
</tr>
</table>
<table id="table3" style="display:none">
<caption id="caption3">caption 3</caption>
<tr>
<td>cell</td>
<td>cell</td>
</tr>
</table>
<script>
test(function () {
var table1 = document.getElementById('table1');
var testCaption = table1.createCaption();
var table1FirstCaption = table1.caption;
assert_equals(testCaption, table1FirstCaption);
}, "createCaption method returns the first caption element child of the table")
test(function () {
var table2 = document.getElementById('table2');
var test2Caption = table2.createCaption();
var table2FirstNode = table2.firstChild;
assert_true(test2Caption instanceof HTMLTableCaptionElement);
assert_equals(table2FirstNode, test2Caption);
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
test(function () {
var table3 = document.getElementById('table3');
assert_equals(table3.caption.textContent, "caption 3");
table3.deleteCaption();
assert_equals(table3.caption, null);
}, "deleteCaption method removes the first caption element child of the table element")
</script>
<div id="log"></div>
<table id="table1" style="display:none">
<caption id="caption1">caption</caption>
<tr>
<td>cell</td>
<td>cell</td>
</tr>
</table>
<table id="table2" style="display:none">
<tr>
<td>cell</td>
<td>cell</td>
</tr>
</table>
<table id="table3" style="display:none">
<caption id="caption3">caption 3</caption>
<tr>
<td>cell</td>
<td>cell</td>
</tr>
</table>
<script>
test(function () {
var table1 = document.getElementById('table1');
var testCaption = table1.createCaption();
var table1FirstCaption = table1.caption;
assert_equals(testCaption, table1FirstCaption);
}, "createCaption method returns the first caption element child of the table")
test(function () {
var table2 = document.getElementById('table2');
var test2Caption = table2.createCaption();
var table2FirstNode = table2.firstChild;
assert_true(test2Caption instanceof HTMLTableCaptionElement);
assert_equals(table2FirstNode, test2Caption);
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
test(function () {
var table3 = document.getElementById('table3');
assert_equals(table3.caption.textContent, "caption 3");
table3.deleteCaption();
assert_equals(table3.caption, null);
}, "deleteCaption method removes the first caption element child of the table element")
</script>
</body>
</html>
</html>

View file

@ -1,32 +1,32 @@
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>HTML time element API</title>
<style>
<head>
<meta charset=utf-8>
<title>HTML time element API</title>
<style>
#time { visibility: hidden; }
</style>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-time-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<!-- intentionally nested to test parsing rules -->
<p id="time"><time pubdate datetime="2000-02-01T03:04:05Z">Dummy text <time>2001-06-07T<time>08:09<time></time></time>Z</time></time></p>
<script type="text/javascript">
</style>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-time-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<!-- intentionally nested to test parsing rules -->
<p id="time"><time pubdate datetime="2000-02-01T03:04:05Z">Dummy text <time>2001-06-07T<time>08:09<time></time></time>Z</time></time></p>
<script type="text/javascript">
function makeTime(dateTime,contents,dateTimeProp) {
var timeEl = document.createElement('time');
if( dateTime ) {
timeEl.setAttribute('datetime',dateTime);
}
if( contents ) {
timeEl.innerHTML = contents;
}
if( dateTimeProp ) {
timeEl.dateTime = dateTimeProp;
}
return timeEl;
var timeEl = document.createElement('time');
if( dateTime ) {
timeEl.setAttribute('datetime',dateTime);
}
if( contents ) {
timeEl.innerHTML = contents;
}
if( dateTimeProp ) {
timeEl.dateTime = dateTimeProp;
}
return timeEl;
}
var timep = document.getElementById('time');
@ -34,35 +34,35 @@ var times = timep.getElementsByTagName('time');
//TIME elements
test(function () {
assert_equals( times.length, 4 );
assert_equals( times.length, 4 );
}, 'HTML parsing should locate 4 time elements in this document');
test(function () {
assert_true( !!window.HTMLTimeElement );
assert_true( !!window.HTMLTimeElement );
}, 'HTMLTimeElement should be exposed for prototyping');
test(function () {
assert_true( makeTime() instanceof window.HTMLTimeElement, 'createElement variant' );
assert_true( times[0] instanceof window.HTMLTimeElement, 'HTML parsing variant' );
assert_true( makeTime() instanceof window.HTMLTimeElement, 'createElement variant' );
assert_true( times[0] instanceof window.HTMLTimeElement, 'HTML parsing variant' );
}, 'the time elements should be instanceof HTMLTimeElement');
//dateTime
test(function () {
assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
}, 'the datetime attribute should be reflected by the .dateTime property');
test(function () {
assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' );
assert_equals( makeTime().dateTime, '', 'value test' );
assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' );
assert_equals( makeTime().dateTime, '', 'value test' );
}, 'the dateTime IDL property should default to an empty string');
test(function () {
assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
}, 'the dateTime property should be read/write');
test(function () {
assert_equals( makeTime('go fish').dateTime, 'go fish' );
assert_equals( makeTime('go fish').dateTime, 'go fish' );
}, 'the datetime attribute should be reflected by the .dateTime property even if it is invalid');
test(function () {
assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' );
assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' );
}, 'the datetime attribute should not reflect the textContent');
</script>
</script>
</body>
</body>
</html>

View file

@ -21,77 +21,77 @@ test(function () {
/* Happy path */
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo');
}, 'a handler with valid arguments should work');
/* URL argument */
test(function () {
navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo');
navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo');
}, 'a relative URL should work');
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo');
}, 'a URL with a fragment identifier should work');
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo');
}, 'a URL with a query string should work');
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo');
}, 'a URL with a multi-argument query string should work');
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo');
}, 'a URL with the passed string as a directory name should work');
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
}, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work');
test(function () {
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo');
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo');
}, 'a URL with the passed string included twice should work');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } );
}, 'an empty url argument should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } );
}, '%s instead of domain name should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } );
}, '%s instead of subdomain name should throw syntax_err');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } );
}, 'a url argument without %s should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } );
}, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } );
}, 'a url argument without %s (but with %) should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } );
}, 'a url argument without %s (but with %a) should throw SYNTAX_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } );
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } );
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } );
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)');
/* Content type argument */
@ -109,9 +109,9 @@ var blacklist = new Array(
for (var bi=0, bl=blacklist.length; bi<bl; ++bi){
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } );
}, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } );
}, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR');
}
@ -124,9 +124,9 @@ var whitelist = new Array('application/atom+xml', /* For feeds. */
for (var wi=0, wl=whitelist.length; wi<wl; ++wi){
test(function () {
navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo');
}, 'overriding the ' + whitelist[wi] + ' MIME type should work');
test(function () {
navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo');
}, 'overriding the ' + whitelist[wi] + ' MIME type should work');
}

View file

@ -20,163 +20,163 @@ test(function () {
}, 'the registerProtocolHandler method should exist on the navigator object');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '/%s', 'foo');
navigator.registerProtocolHandler('tel', location.href + '/%s', 'foo');
}, 'a handler with valid arguments should work');
/* URL argument */
test(function () {
navigator.registerProtocolHandler('tel', '%s', 'foo');
navigator.registerProtocolHandler('tel', '%s', 'foo');
}, 'a relative URL should work');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '#%s', 'foo');
navigator.registerProtocolHandler('tel', location.href + '#%s', 'foo');
}, 'a URL with a fragment identifier should work');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '?foo=%s', 'foo');
navigator.registerProtocolHandler('tel', location.href + '?foo=%s', 'foo');
}, 'a URL with a query string should work');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '?foo=%s&bar', 'foo');
navigator.registerProtocolHandler('tel', location.href + '?foo=%s&bar', 'foo');
}, 'a URL with a multi-argument query string should work');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/', 'foo');
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/', 'foo');
}, 'a URL with the passed string as a directory name should work');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
}, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work');
test(function () {
navigator.registerProtocolHandler('tel', location.href + '/%s/foo/%s/', 'foo');
navigator.registerProtocolHandler('tel', location.href + '/%s/foo/%s/', 'foo');
}, 'a URL with the passed string included twice should work');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', '', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', '', 'foo') } );
}, 'an empty url argument should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } );
}, '%s instead of domain name should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } );
}, '%s instead of subdomain name should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } );
}, 'a url argument without %s should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com', 'foo') } );
}, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%', 'foo') } );
}, 'a url argument without %s (but with %) should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%a', 'foo') } );
}, 'a url argument without %s (but with %a) should throw SYNTAX_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com/%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com/%s', 'foo') } );
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'https://example.com/%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'https://example.com/%s', 'foo') } );
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://foobar.example.com/%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://foobar.example.com/%s', 'foo') } );
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'mailto:%s@example.com', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'mailto:%s@example.com', 'foo') } );
}, 'looping handlers should throw SECURITY_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('sms', 'tel:%s', 'foo') } );
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('sms', 'tel:%s', 'foo') } );
}, 'a url argument pointing to a non-http[s] scheme should throw SECURITY_ERR due to not being of the same origin');
/* Protocol argument */
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('unrecognized', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('unrecognized', location.href + '/%a', 'foo') } );
}, 'a protocol argument containing an unrecognized scheme should throw SECURITY_ERR'); /* This is a whitelist, not a blacklist. */
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto:', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto:', location.href + '/%a', 'foo') } );
}, 'a protocol argument containing : should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto://', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto://', location.href + '/%a', 'foo') } );
}, 'a protocol argument containing :// should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('http://', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('http://', location.href + '/%a', 'foo') } );
}, 'a protocol argument containing http:// should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(0), location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(0), location.href + '/%a', 'foo') } );
}, 'a protocol argument containing a null character should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailtoo' + String.fromCharCode(8), location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailtoo' + String.fromCharCode(8), location.href + '/%a', 'foo') } );
}, 'a protocol argument containing a backspace character should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(10), location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(10), location.href + '/%a', 'foo') } );
}, 'a protocol argument containing a LF character should throw SYNTAX_ERR');
test(function () {
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mаilto', location.href + '/%a', 'foo') } );
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mаilto', location.href + '/%a', 'foo') } );
}, 'a protocol argument containing non-alphanumeric characters (like a cyrillic “а”) should throw SYNTAX_ERR');
test(function () {
navigator.registerProtocolHandler('TEL', location.href + '/%s', 'foo');
navigator.registerProtocolHandler('TEL', location.href + '/%s', 'foo');
}, 'a protocol argument of “TEL” should be equivalent to “tel”');
test(function () {
navigator.registerProtocolHandler('teL', location.href + '/%s', 'foo');
navigator.registerProtocolHandler('teL', location.href + '/%s', 'foo');
}, 'a protocol argument of “teL” should be equivalent to “tel”');
/* Overriding any of the following protocols must never be allowed. That would
* break the browser. */
var blacklist = new Array(
'about',
'attachment',
'blob',
'chrome',
'cid',
'data',
'file',
'ftp',
'http',
'https',
'javascript',
'livescript',
'mid',
'mocha',
'opera',
'operamail',
'res',
'resource',
'shttp',
'tcl',
'vbscript',
'view-source',
'ws',
'wss',
'wyciwyg');
'about',
'attachment',
'blob',
'chrome',
'cid',
'data',
'file',
'ftp',
'http',
'https',
'javascript',
'livescript',
'mid',
'mocha',
'opera',
'operamail',
'res',
'resource',
'shttp',
'tcl',
'vbscript',
'view-source',
'ws',
'wss',
'wyciwyg');
for ( var bi=0, bl=blacklist.length; bi<bl; ++bi ){
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler(blacklist[bi], location.href + '/%s', 'foo') } );
}, 'attempting to override the ' + blacklist[bi] + ' protocol should throw SECURITY_ERR');
test(function () {
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler(blacklist[bi], location.href + '/%s', 'foo') } );
}, 'attempting to override the ' + blacklist[bi] + ' protocol should throw SECURITY_ERR');
}
@ -184,28 +184,28 @@ for ( var bi=0, bl=blacklist.length; bi<bl; ++bi ){
* We're just testing that the call goes through here. Whether or not they
* actually work as handlers is covered by the interactive tests. */
var whitelist = new Array(
'geo',
'im',
'irc',
'ircs',
'mailto',
'mms',
'news',
'nntp',
'sms',
'smsto',
'tel',
'urn',
'webcal',
'wtai',
'xmpp');
'geo',
'im',
'irc',
'ircs',
'mailto',
'mms',
'news',
'nntp',
'sms',
'smsto',
'tel',
'urn',
'webcal',
'wtai',
'xmpp');
for ( var wi=0, wl=whitelist.length; wi<wl; ++wi ){
test(function () {
navigator.registerProtocolHandler(whitelist[wi], location.href + '/%s', 'foo');
assert_true(true);
}, 'overriding the ' + whitelist[wi] + ' protocol should work');
test(function () {
navigator.registerProtocolHandler(whitelist[wi], location.href + '/%s', 'foo');
assert_true(true);
}, 'overriding the ' + whitelist[wi] + ' protocol should work');
}
</script>

View file

@ -15,9 +15,7 @@ INDENT TABS: custom-elements/*
INDENT TABS: DOMEvents/*
INDENT TABS: eventsource/*
INDENT TABS: html/editing/dnd/*
INDENT TABS: html/semantics/*
INDENT TABS: html/syntax/*
INDENT TABS: html/webappapis/*
INDENT TABS: media-source/*
INDENT TABS: old-tests/*
INDENT TABS: pointerlock/*
@ -89,6 +87,7 @@ PRINT STATEMENT:*/tools/*
CR AT EOL:WebIDL/valid/idl/documentation-dos.widl
CR AT EOL:cors/resources/cors-headers.asis
CR AT EOL:html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html
INDENT TABS:html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html
CR AT EOL:webvtt/webvtt-file-format-parsing/webvtt-file-parsing/support/newlines.vtt
PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.svg
PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.xhtml

View file

@ -97,5 +97,5 @@ function mediaSourceConfigChangeTest(directory, idA, idB, description)
});
});
});
}, description, { timeout: 10000 } );
}, description);
};

View file

@ -211,7 +211,7 @@
test.done();
});
});
}, 'Test setting same duration multiple times does not fire duplicate durationchange', {timeout: 2500});
}, 'Test setting same duration multiple times does not fire duplicate durationchange');
</script>
</body>
</html>

View file

@ -65,7 +65,7 @@
assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
test.done();
});
}, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API", {timeout: 5000});
}, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");
</script>
</body>
</html>

View file

@ -38,7 +38,7 @@
mediaSource.endOfStream();
mediaElement.play();
});
}, "Test normal playback case with MediaSource API", {timeout: 5000});
}, "Test normal playback case with MediaSource API");
</script>
</body>
</html>

View file

@ -63,7 +63,7 @@
test.done();
});
}, 'Test seeking to a new location before transitioning beyond HAVE_METADATA.', {timeout: 10000} );
}, 'Test seeking to a new location before transitioning beyond HAVE_METADATA.');
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
{
@ -136,7 +136,7 @@
assert_greater_than(mediaElement.readyState, mediaElement.HAVE_CURRENT_DATA, 'Greater than HAVE_CURRENT_DATA');
test.done();
});
}, 'Test seeking to a new location during a pending seek.', {timeout: 10000} );
}, 'Test seeking to a new location during a pending seek.');
</script>
</body>
</html>

View file

@ -1,6 +1,4 @@
(function(window) {
setup({ timeout: 12000 });
var SEGMENT_INFO_LIST = [
{
url: 'mp4/test.mp4',

View file

@ -1,18 +1,18 @@
<!DOCTYPE html>
<html><head>
<title> scheduler: removing async attribute at runtime</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="testlib/testlib.js"></script>
<title> scheduler: removing async attribute at runtime</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="testlib/testlib.js"></script>
</head>
<body>
<div id="test"></div>
<div id="log">FAILED (This TC requires JavaScript enabled)</div>
<div id="log">FAILED (This TC requires JavaScript enabled)</div>
<script id="async-script" async src="scripts/include-2.js?pipe=trickle(d1)"></script>
<script id="async-script" async src="scripts/include-2.js?pipe=trickle(d2)"></script>
<script>
<script>
var t = async_test();
t.step(function() {
@ -27,6 +27,6 @@
assert_array_equals(eventOrder, ["external script #1", "external script #2"]);
t.done();
}), false);
</script>
</body></html>

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<head>
<title>Referrer-Policy Web Platform Tests - README</title>
</head>
<body>
<p>
TODO(burnik): Instructions on how to write tests for Referrer-Policy.
</p>
</body>

View file

@ -0,0 +1,28 @@
// NOTE: This method only strips the fragment and is not in accordance to the
// recommended draft specification:
// https://w3c.github.io/webappsec/specs/referrer-policy/#null
// TODO(burnik): Implement this helper as defined by spec once added scenarios
// for URLs containing username/password/etc.
function stripUrlForUseAsReferrer(url) {
return url.replace(/#.*$/, "");
}
function parseUrlQueryString(queryString) {
var queries = queryString.replace(/^\?/, "").split("&");
var params = {};
for (var i in queries) {
var kvp = queries[i].split("=");
params[kvp[0]] = kvp[1];
}
return params;
};
function appendIframeToBody(url) {
var iframe = document.createElement("iframe");
iframe.src = url;
document.body.appendChild(iframe);
return iframe;
}

View file

@ -0,0 +1,159 @@
<!DOCTYPE html>
<html>
<head>
<title>Check that sub-resource gets the referrer URL when no explicit
Referrer Policy is set.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!-- Common global functions for referrer-policy tests. -->
<script src="../generic/common.js"></script>
</head>
<body>
<h1>Check that sub-resource gets the referrer URL when no explicit Referrer
Policy is set.</h1>
<p>This page loads sub-resources (iframes) and waits for messages containing
referrer URLs from children.</p>
<script>
var documentUrl = document.location.toString();
// Referrer policy can also be defined via meta tag of parent.
// TODO(burnik): For now we use the DOM element itself as we expect it not
// to be explicitly defined on the page. We should use the content
// attribute value instead.
var documentMetaReferrer = document.querySelector("meta[name=referrer]");
// The referrer URL should be this document's URL adjusted according to
// this section:
// https://w3c.github.io/webappsec/specs/referrer-policy/#strip-url
var expectedReferrerUrl = stripUrlForUseAsReferrer(documentUrl);
// Path to the sub-resource page which reports back it's own context.
var subresourceUrlPath = "/referrer-policy/no-referrer-policy" +
"/no-referrer-policy.subresource.py";
// Define all the test definitions here to create correspoding test
// arrangements. Each test arrangement will have it's own iframe and ID
// passed by URL. The ID should be unique as it identifies the message
// coming back from the iframe and matches the corressponding test to be
// run.
var scenarios = [
{
id: "same-origin",
url: location.protocol + "//" + location.hostname + ":" +
location.port + subresourceUrlPath,
metaReferrer: documentMetaReferrer,
expectedReferrerUrl: expectedReferrerUrl,
description: "Refrerer URL is passed to sub-resource (iframe) of " +
"same-origin."
},
{
id: "cross-origin",
url: location.protocol + "//www1." + location.hostname + ":" +
location.port + subresourceUrlPath,
metaReferrer: documentMetaReferrer,
expectedReferrerUrl: expectedReferrerUrl,
description: "Refrerer URL is passed to sub-resource (iframe) of " +
"cross-origin."
}
];
//////////////////////////////////////////////////////////////////////////
// Rest of the script arranges and runs all the tests defined above.
//////////////////////////////////////////////////////////////////////////
// Creates a test arrangement from a test scenario.
function arrangeScenario(scenario) {
var test = async_test(scenario.description);
var subresourceUrl = scenario.url + "?id=" + scenario.id;
var testArrangement = {
scenario:scenario,
test:test,
subresourceUrl:subresourceUrl
};
return testArrangement;
}
// Asserts the values for an iframe response message and matched test
// arrangement.
function assertScenario(message, testArrangement) {
// Defense: Making sure the message and test arrangement are up to date.
testArrangement.test.step(function() {
assert_equals(Object.keys(message).length, 4);
assert_own_property(message, "id");
assert_own_property(message, "location");
assert_own_property(message, "referrer");
assert_own_property(message, "headers");
assert_own_property(message.headers, "referer");
assert_equals(Object.keys(testArrangement).length, 3);
assert_own_property(testArrangement, "scenario");
assert_own_property(testArrangement, "test");
assert_own_property(testArrangement, "subresourceUrl");
assert_equals(Object.keys(testArrangement.scenario).length, 5);
assert_own_property(testArrangement.scenario, "id");
assert_own_property(testArrangement.scenario, "url");
assert_own_property(testArrangement.scenario, "metaReferrer");
assert_own_property(testArrangement.scenario, "expectedReferrerUrl");
assert_own_property(testArrangement.scenario, "description");
}, "Running a valid test scenario.");
testArrangement.test.step(function() {
// TODO(burnik): This check should be specified by the scenario
// itself. For now we only expect that there is no CSP so neither is
// the referrer policy explicitly defined via HTTP headers.
assert_not_exists(message.headers, "content-security-policy",
"No referrer policy is set.");
// The meta defined refferer should also not exist.
assert_equals(testArrangement.scenario.metaReferrer, null);
}, "No referrer policy is explicity defined via HTTP headers or meta.")
testArrangement.test.step(function() {
// Sanity check - location of iframe matches reported location.
assert_equals(message.location, testArrangement.subresourceUrl,
"Child reported location.");
// Child reports the referrer URL available from DOM.
assert_equals(message.referrer,
testArrangement.scenario.expectedReferrerUrl,
"Child reported referrer.");
// Also check the request headers reported from the server.
assert_equals(message.headers.referer,
testArrangement.scenario.expectedReferrerUrl,
"Child reported referrer (from server).");
}, "Referrer URL is passed to the sub-resource (iframe).");
testArrangement.test.done();
}
// Using a map to easily find and run the test corresponding to the
// received message ID (iframe).
var testArrangementMap = {};
// With this handler we receive all the messages from the iframes.
// We identify the source and appropriate test arrangement to be run via
// the provided message ID.
window.addEventListener("message", function (event) {
var childMessage = event.data;
var testArrangement = testArrangementMap[childMessage.id];
// Run the test for this sub-resource.
assertScenario(childMessage, testArrangement);
});
// Map all test arrangements by ID and append iframes.
for (var i in scenarios) {
var testArrangement = arrangeScenario(scenarios[i]);
testArrangementMap[scenarios[i].id] = testArrangement;
appendIframeToBody(testArrangement.subresourceUrl);
}
</script>
<div id="log"></div>
</body>
</html>

View file

@ -0,0 +1,15 @@
import os, json
def main(request, response):
script_directory = os.path.dirname(os.path.abspath(__file__))
template_basename = "no-referrer-policy.subresource.template.html"
template_filename = os.path.join(script_directory, template_basename);
with open(template_filename) as f:
template = f.read()
headers_as_json = json.dumps(request.headers)
exported_headers = "var SERVER_REQUEST_HEADERS = " + headers_as_json + ";"
rendered_html = template % {"headers": headers_as_json}
return response.headers, rendered_html

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<title>This page reports back it's request details the parent frame</title>
<!-- Common global functions for referrer-policy tests. -->
<script src="../generic/common.js"></script>
</head>
<body>
<h2>This page reports back it's request details to the parent frame.</h2>
<script>
// Notice: This is filled in from server side.
var SERVER_REQUEST_HEADERS = %(headers)s;
var query = parseUrlQueryString(document.location.search)
// Note: Read the ID from the query section of this page's URL.
// The ID is used to identify the sender of the message in the parent.
var pageInfo = {
id: query.id,
location: document.location.toString(),
referrer: document.referrer,
headers: SERVER_REQUEST_HEADERS
};
// Notify parent frame.
parent.postMessage(pageInfo, "*");
</script>
</body>
</html>

View file

@ -56,6 +56,19 @@ function constValue (cnt) {
return cnt.value;
}
function minOverloadLength(overloads) {
if (!overloads.length) {
return 0;
}
return overloads.map(function(attr) {
return attr.arguments ? attr.arguments.filter(function(arg) {
return !arg.optional && !arg.variadic;
}).length : 0;
})
.reduce(function(m, n) { return Math.min(m, n); });
}
/// IdlArray ///
// Entry point
self.IdlArray = function()
@ -754,22 +767,7 @@ IdlInterface.prototype.test_self = function()
var constructors = this.extAttrs
.filter(function(attr) { return attr.name == "Constructor"; });
var expected_length;
if (!constructors.length) {
// "If the [Constructor] extended attribute, does not appear on
// the interface definition, then the value is 0."
expected_length = 0;
} else {
// "Otherwise, the value is determined as follows: . . .
// "Return the length of the shortest argument list of the
// entries in S."
expected_length = constructors.map(function(attr) {
return attr.arguments ? attr.arguments.filter(function(arg) {
return !arg.optional;
}).length : 0;
})
.reduce(function(m, n) { return Math.min(m, n); });
}
var expected_length = minOverloadLength(constructors);
assert_equals(self[this.name].length, expected_length, "wrong value for " + this.name + ".length");
}.bind(this), this.name + " interface object length");
}
@ -1122,12 +1120,10 @@ IdlInterface.prototype.do_member_operation_asserts = function(memberHolderObject
// ". . .
// "Return the length of the shortest argument list of the
// entries in S."
//
// TODO: Doesn't handle overloading or variadic arguments.
assert_equals(memberHolderObject[member.name].length,
member.arguments.filter(function(arg) {
return !arg.optional;
}).length,
minOverloadLength(this.members.filter(function(m) {
return m.type == "operation" && m.name == member.name;
})),
"property has wrong .length");
// Make some suitable arguments
@ -1460,13 +1456,12 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
{
assert_false(member.name in obj);
}
var minLength = minOverloadLength(this.members.filter(function(m) {
return m.type == "operation" && m.name == member.name;
}));
var args = [];
for (var i = 0; i < member.arguments.length; i++)
{
if (member.arguments[i].optional)
{
break;
}
for (var i = 0; i < minLength; i++) {
assert_throws(new TypeError(), function()
{
obj[member.name].apply(obj, args);

View file

@ -368,8 +368,20 @@ policies and contribution forms [3].
self.addEventListener("message",
function(event) {
if (event.data.type && event.data.type === "connect") {
this_obj._add_message_port(event.ports[0]);
event.ports[0].start();
if (event.ports && event.ports[0]) {
// If a MessageChannel was passed, then use it to
// send results back to the main window. This
// allows the tests to work even if the browser
// does not fully support MessageEvent.source in
// ServiceWorkers yet.
this_obj._add_message_port(event.ports[0]);
event.ports[0].start();
} else {
// If there is no MessageChannel, then attempt to
// use the MessageEvent.source to send results
// back to the main window.
this_obj._add_message_port(event.source);
}
}
});
@ -1476,15 +1488,24 @@ policies and contribution forms [3].
var message_port;
if (is_service_worker(worker)) {
// The ServiceWorker's implicit MessagePort is currently not
// reliably accessible from the ServiceWorkerGlobalScope due to
// Blink setting MessageEvent.source to null for messages sent via
// ServiceWorker.postMessage(). Until that's resolved, create an
// explicit MessageChannel and pass one end to the worker.
var message_channel = new MessageChannel();
message_port = message_channel.port1;
message_port.start();
worker.postMessage({type: "connect"}, [message_channel.port2]);
if (window.MessageChannel) {
// The ServiceWorker's implicit MessagePort is currently not
// reliably accessible from the ServiceWorkerGlobalScope due to
// Blink setting MessageEvent.source to null for messages sent
// via ServiceWorker.postMessage(). Until that's resolved,
// create an explicit MessageChannel and pass one end to the
// worker.
var message_channel = new MessageChannel();
message_port = message_channel.port1;
message_port.start();
worker.postMessage({type: "connect"}, [message_channel.port2]);
} else {
// If MessageChannel is not available, then try the
// ServiceWorker.postMessage() approach using MessageEvent.source
// on the other end.
message_port = navigator.serviceWorker;
worker.postMessage({type: "connect"});
}
} else if (is_shared_worker(worker)) {
message_port = worker.port;
} else {
@ -2335,7 +2356,15 @@ policies and contribution forms [3].
AssertionError.prototype = Object.create(Error.prototype);
AssertionError.prototype.get_stack = function() {
var lines = new Error().stack.split("\n");
var stack = new Error().stack;
if (!stack) {
try {
throw new Error();
} catch (e) {
stack = e.stack;
}
}
var lines = stack.split("\n");
var rv = [];
var re = /\/resources\/testharness\.js/;
var i = 0;

View file

@ -103,14 +103,6 @@ var vary_entries = [
request: new Request('http://example.com/c'),
response: new Response('',
{headers: {'Vary': 'Cookies'}})
},
{
name: 'vary_wildcard',
request: new Request('http://example.com/c',
{headers: {'Cookies': 'x', 'X-Key': '1'}}),
response: new Response('',
{headers: {'Vary': '*'}})
}
];
@ -311,7 +303,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
assert_array_equivalent(
result,
[
entries.vary_wildcard.response,
entries.vary_cookie_absent.response
],
'Cache.matchAll should exclude matches if a vary header is ' +
@ -328,7 +319,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
assert_array_equivalent(
result,
[
entries.vary_wildcard.response
],
'Cache.matchAll should exclude matches if a vary header is ' +
'missing in the cached request, but is present in the query ' +
@ -355,7 +345,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
assert_object_in_array(
result,
[
entries.vary_wildcard.response,
entries.vary_cookie_absent.response
],
'Cache.match should honor "Vary" header.');
@ -372,7 +361,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
entries.vary_cookie_is_cookie.response,
entries.vary_cookie_is_good.response,
entries.vary_cookie_absent.response,
entries.vary_wildcard.response
],
'Cache.matchAll should honor "ignoreVary" parameter.');
});

View file

@ -283,12 +283,35 @@ cache_test(function(cache) {
'[https://fetch.spec.whatwg.org/#dom-body-bodyused] ' +
'Response.bodyUsed should be initially false.');
return response.text().then(function() {
assert_false(
assert_true(
response.bodyUsed,
'[https://fetch.spec.whatwg.org/#concept-body-consume-body] ' +
'The text() method should not set "body passed" flag.');
return cache.put(new Request(test_url), response);
});
'The text() method should set "body used" flag.');
return assert_promise_rejects(
cache.put(new Request(test_url), response),
new TypeError,
'[https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-put] ' +
'Cache put should reject with TypeError when Response ' +
'body is already used.');
});
}, 'Cache.put with a used response body');
cache_test(function(cache) {
return assert_promise_rejects(
cache.put(new Request(test_url),
new Response(test_body, { headers: { VARY: '*' }})),
new TypeError(),
'Cache.put should reject VARY:* Responses with a TypeError.');
}, 'Cache.put with a VARY:* Response');
cache_test(function(cache) {
return assert_promise_rejects(
cache.put(new Request(test_url),
new Response(test_body,
{ headers: { VARY: 'Accept-Language,*' }})),
new TypeError(),
'Cache.put should reject Responses with an embedded VARY:* with a ' +
'TypeError.');
}, 'Cache.put with an embedded VARY:* Response');
done();

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.add and Cache.addAll</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-add">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.delete</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-delete">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.keys</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.match</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage-match">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: Cache.add and Cache.addAll</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-add">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: Cache.delete</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-delete">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: CacheStorage.keys</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: CacheStorage.match</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage-match">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: CacheStorage</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: Verify access in sandboxed iframes</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.add and Cache.addAll</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-add">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.delete</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-delete">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.keys</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.match</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage-match">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,6 @@
<!doctype html>
<meta charset=utf-8>
<title>Web Animations API: AnimationTimeline tests</title>
<title>Web Animations API: DocumentTimeline tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>

View file

@ -1,15 +1,18 @@
<!doctype html>
<meta charset=utf-8>
<title>Web Animations API: AnimationTimeline tests</title>
<title>Web Animations API: DocumentTimeline tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<div id="log"></div>
<script type="text/plain" id="AnimationTimeline-IDL">
<script type="text/plain" id="DocumentTimeline-IDL">
interface AnimationTimeline {
readonly attribute double? currentTime;
};
interface DocumentTimeline : AnimationTimeline {
};
</script>
<script>
'use strict';
@ -18,8 +21,8 @@ var idlArray;
test(function() {
idlArray = new IdlArray();
idlArray.add_idls(
document.getElementById('AnimationTimeline-IDL').textContent);
idlArray.add_objects( { AnimationTimeline: ['document.timeline'] } );
document.getElementById('DocumentTimeline-IDL').textContent);
idlArray.add_objects( { DocumentTimeline: ['document.timeline'] } );
});
idlArray.test();

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, location.href, []);
window[1].postMessage(2, url, []);
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i === 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2") }), 1000);
});
};
};
</script>

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, '*', []);
window[1].postMessage(2, '*', []);
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i === 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2") }), 1000);
});
};
};
</script>

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, location.href);
window[1].postMessage(2, url);
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i == 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() {assert_unreached("Only got " + i + " events before timeout, expected 2")}), 1000);
});
};
};
</script>

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, '*');
window[1].postMessage(2, '*');
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i === 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2")}), 1000);
});
};
};
</script>

View file

@ -0,0 +1,149 @@
<!doctype html>
<!--
This test uses no media, and thus does not require fake media devices.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RTCPeerConnection No-Media Connection Test</title>
</head>
<body>
<div id="log"></div>
<h2>iceConnectionState info</h2>
<div id="stateinfo">
</div>
<!-- These files are in place when executing on W3C. -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/vendor-prefix.js"
data-prefixed-objects=
'[{"ancestors":["window"], "name":"RTCPeerConnection"},
{"ancestors":["window"], "name":"RTCSessionDescription"},
{"ancestors":["window"], "name":"RTCIceCandidate"}]'
>
</script>
<script type="text/javascript">
var test = async_test('Can set up a basic WebRTC call with no data.');
var gFirstConnection = null;
var gSecondConnection = null;
var onOfferCreated = test.step_func(function(offer) {
// TODO: Switch to promise-based interface.
gFirstConnection.setLocalDescription(offer, ignoreSuccess,
failed('setLocalDescription first'));
// This would normally go across the application's signaling solution.
// In our case, the "signaling" is to call this function.
receiveCall(offer.sdp);
});
function receiveCall(offerSdp) {
var parsedOffer = new RTCSessionDescription({ type: 'offer',
sdp: offerSdp });
// These functions use the legacy interface extensions to RTCPeerConnection.
// TODO: Switch to promise-based interfaces.
gSecondConnection.setRemoteDescription(parsedOffer,
function() {
gSecondConnection.createAnswer(onAnswerCreated,
failed('createAnswer'));
},
failed('setRemoteDescription second'));
};
var onAnswerCreated = test.step_func(function(answer) {
gSecondConnection.setLocalDescription(answer, ignoreSuccess,
failed('setLocalDescription second'));
// Similarly, this would go over the application's signaling solution.
handleAnswer(answer.sdp);
});
function handleAnswer(answerSdp) {
var parsedAnswer = new RTCSessionDescription({ type: 'answer',
sdp: answerSdp });
gFirstConnection.setRemoteDescription(parsedAnswer, ignoreSuccess,
failed('setRemoteDescription first'));
};
var onIceCandidateToFirst = test.step_func(function(event) {
// If event.candidate is null = no more candidates.
if (event.candidate) {
var candidate = new RTCIceCandidate(event.candidate);
gSecondConnection.addIceCandidate(candidate);
}
});
var onIceCandidateToSecond = test.step_func(function(event) {
if (event.candidate) {
var candidate = new RTCIceCandidate(event.candidate);
gFirstConnection.addIceCandidate(candidate);
}
});
var onRemoteStream = test.step_func(function(event) {
assert_unreached('WebRTC received a stream when there was none');
});
var onIceConnectionStateChange = test.step_func(function(event) {
assert_equals(event.type, 'iceconnectionstatechange');
var stateinfo = document.getElementById('stateinfo');
stateinfo.innerHTML = 'First: ' + gFirstConnection.iceConnectionState
+ '<br>Second: ' + gSecondConnection.iceConnectionState;
// Note: All these combinations are legal states indicating that the
// call has connected. All browsers should end up in completed/completed,
// but as of this moment, we've chosen to terminate the test early.
// TODO: Revise test to ensure completed/completed is reached.
if (gFirstConnection.iceConnectionState == 'connected' &&
gSecondConnection.iceConnectionState == 'connected') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'connected' &&
gSecondConnection.iceConnectionState == 'completed') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'completed' &&
gSecondConnection.iceConnectionState == 'connected') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'completed' &&
gSecondConnection.iceConnectionState == 'completed') {
test.done()
}
});
// Returns a suitable error callback.
function failed(function_name) {
return test.step_func(function() {
assert_unreached('WebRTC called error callback for ' + function_name);
});
}
// Returns a suitable do-nothing.
function ignoreSuccess(function_name) {
}
// This function starts the test.
test.step(function() {
gFirstConnection = new RTCPeerConnection(null);
gFirstConnection.onicecandidate = onIceCandidateToFirst;
gFirstConnection.oniceconnectionstatechange = onIceConnectionStateChange;
gSecondConnection = new RTCPeerConnection(null);
gSecondConnection.onicecandidate = onIceCandidateToSecond;
gSecondConnection.onaddstream = onRemoteStream;
gSecondConnection.oniceconnectionstatechange = onIceConnectionStateChange;
// The offerToReceiveVideo is necessary and sufficient to make
// an actual connection.
// TODO: Use a promise-based API. This is legacy.
gFirstConnection.createOffer(onOfferCreated, failed('createOffer'),
{offerToReceiveVideo: true});
});
</script>
</body>
</html>

View file

@ -4,19 +4,19 @@
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
async_test(function(t) {
async_test(function() {
var testResult;
var worker = new Worker('./support/WorkerTerminate.js');
worker.onmessage = function(e) {
worker.onmessage = this.step_func(function(e) {
testResult = e.data;
if (testResult >= 10000) {
worker.terminate();
worker.onmessage = t.unreached_func('Unexpected message event');
setTimeout(t.step_func_done(function() {
worker.onmessage = this.unreached_func('Unexpected message event');
setTimeout(this.step_func_done(function() {
assert_equals(testResult, 10000);
}), 100);
}
};
});
worker.postMessage("ping");
});
</script>

View file

@ -12,23 +12,15 @@ close();
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
var gotMessage = false;
var gotError = false;
var worker = new Worker('#');
worker.onmessage = function(e) {
gotMessage = true;
};
worker.onerror = function(e) {
gotError = true;
};
worker.postMessage(1);
setTimeout(this.step_func(function() {
assert_false(gotMessage, 'got message');
assert_true(gotError, 'got error');
this.done();
}), 500);
});
var worker = new Worker('#');
worker.onmessage = function(e) {
assert_unreached("Got message");
};
worker.onerror = function(e) {
assert_unreached("Got error");
};
worker.postMessage(1);
setTimeout(done, 2000);
</script>
<!--
*/

View file

@ -18,22 +18,14 @@ var interval2 = setInterval(function() {
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
var gotMessage = false;
var gotError = false;
var worker = new Worker('#');
worker.onmessage = function(e) {
gotMessage = true;
};
worker.onerror = function(e) {
gotError = true;
};
setTimeout(this.step_func(function() {
assert_false(gotMessage, 'got message');
assert_true(gotError, 'got error');
this.done();
}), 500);
});
var worker = new Worker('#');
worker.onmessage = function(e) {
assert_unreached("Got message");
};
worker.onerror = function(e) {
assert_unreached("Got error");
};
setTimeout(done, 2000);
</script>
<!--
*/

View file

@ -14,27 +14,15 @@ setTimeout(x, 0);
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
setup({allow_uncaught_exception: true});
async_test(function() {
var gotMessage = false;
var gotError = false;
var worker = new Worker('#');
worker.onmessage = function(e) {
gotMessage = true;
};
worker.onerror = function(e) {
gotError = true;
};
setTimeout(this.step_func(function() {
assert_false(gotMessage, 'got message');
assert_true(gotError, 'got error');
this.done();
}), 500);
});
var worker = new Worker('#');
worker.onmessage = function(e) {
assert_unreached("Got message");
};
worker.onerror = function(e) {
assert_unreached("Got error");
};
setTimeout(done, 2000);
</script>
<!--
*/
//-->