Update web-platform-tests to revision 66c4613f823c4384c78ada77346eda17bb128947

This commit is contained in:
Ms2ger 2016-03-15 15:55:36 +01:00
parent 183772583f
commit a91433f0c8
234 changed files with 4368 additions and 967 deletions

View file

@ -72,3 +72,9 @@
[no-argument Blob constructor without 'new'] [no-argument Blob constructor without 'new']
expected: FAIL expected: FAIL
[A plain object with @@iterator should be treated as a sequence for the blobParts argument.]
expected: FAIL
[A plain object with @@iterator and a length property should be treated as a sequence for the blobParts argument.]
expected: FAIL

View file

@ -0,0 +1,5 @@
[Worker-read-file-constructor.worker]
type: testharness
[FileReader in Worker]
expected: FAIL

View file

@ -3245,6 +3245,10 @@
"path": "uievents/order-of-events/mouse-events/mouseevents-mousemove-manual.htm", "path": "uievents/order-of-events/mouse-events/mouseevents-mousemove-manual.htm",
"url": "/uievents/order-of-events/mouse-events/mouseevents-mousemove-manual.htm" "url": "/uievents/order-of-events/mouse-events/mouseevents-mousemove-manual.htm"
}, },
{
"path": "uievents/order-of-events/mouse-events/mouseover-out-manual.html",
"url": "/uievents/order-of-events/mouse-events/mouseover-out-manual.html"
},
{ {
"path": "vibration/cancel-when-hidden-manual.html", "path": "vibration/cancel-when-hidden-manual.html",
"url": "/vibration/cancel-when-hidden-manual.html" "url": "/vibration/cancel-when-hidden-manual.html"
@ -4905,6 +4909,16 @@
], ],
"url": "/html/rendering/non-replaced-elements/tables/table-border-2.html" "url": "/html/rendering/non-replaced-elements/tables/table-border-2.html"
}, },
{
"path": "html/rendering/non-replaced-elements/tables/table-cell-width-s.html",
"references": [
[
"/html/rendering/non-replaced-elements/tables/table-cell-width-ref.html",
"=="
]
],
"url": "/html/rendering/non-replaced-elements/tables/table-cell-width-s.html"
},
{ {
"path": "html/rendering/non-replaced-elements/tables/table-cell-width.html", "path": "html/rendering/non-replaced-elements/tables/table-cell-width.html",
"references": [ "references": [
@ -4935,6 +4949,16 @@
], ],
"url": "/html/rendering/non-replaced-elements/tables/table-width-150percent.html" "url": "/html/rendering/non-replaced-elements/tables/table-width-150percent.html"
}, },
{
"path": "html/rendering/non-replaced-elements/tables/table-width-s.html",
"references": [
[
"/html/rendering/non-replaced-elements/tables/table-width-ref.html",
"=="
]
],
"url": "/html/rendering/non-replaced-elements/tables/table-width-s.html"
},
{ {
"path": "html/rendering/non-replaced-elements/tables/table-width.html", "path": "html/rendering/non-replaced-elements/tables/table-width.html",
"references": [ "references": [
@ -11073,6 +11097,14 @@
"path": "FileAPI/blob/Blob-constructor.html", "path": "FileAPI/blob/Blob-constructor.html",
"url": "/FileAPI/blob/Blob-constructor.html" "url": "/FileAPI/blob/Blob-constructor.html"
}, },
{
"path": "FileAPI/blob/Blob-in-worker.worker.js",
"url": "/FileAPI/blob/Blob-in-worker.worker"
},
{
"path": "FileAPI/blob/Blob-slice-overflow.html",
"url": "/FileAPI/blob/Blob-slice-overflow.html"
},
{ {
"path": "FileAPI/blob/Blob-slice.html", "path": "FileAPI/blob/Blob-slice.html",
"url": "/FileAPI/blob/Blob-slice.html" "url": "/FileAPI/blob/Blob-slice.html"
@ -11081,6 +11113,10 @@
"path": "FileAPI/file/File-constructor.html", "path": "FileAPI/file/File-constructor.html",
"url": "/FileAPI/file/File-constructor.html" "url": "/FileAPI/file/File-constructor.html"
}, },
{
"path": "FileAPI/file/Worker-read-file-constructor.worker.js",
"url": "/FileAPI/file/Worker-read-file-constructor.worker"
},
{ {
"path": "FileAPI/fileReader.html", "path": "FileAPI/fileReader.html",
"url": "/FileAPI/fileReader.html" "url": "/FileAPI/fileReader.html"
@ -11741,6 +11777,10 @@
"path": "IndexedDB/idbindex_openKeyCursor4.htm", "path": "IndexedDB/idbindex_openKeyCursor4.htm",
"url": "/IndexedDB/idbindex_openKeyCursor4.htm" "url": "/IndexedDB/idbindex_openKeyCursor4.htm"
}, },
{
"path": "IndexedDB/idbkeyrange-includes.htm",
"url": "/IndexedDB/idbkeyrange-includes.htm"
},
{ {
"path": "IndexedDB/idbkeyrange.htm", "path": "IndexedDB/idbkeyrange.htm",
"url": "/IndexedDB/idbkeyrange.htm" "url": "/IndexedDB/idbkeyrange.htm"
@ -12217,6 +12257,10 @@
"path": "XMLHttpRequest/abort-during-open.htm", "path": "XMLHttpRequest/abort-during-open.htm",
"url": "/XMLHttpRequest/abort-during-open.htm" "url": "/XMLHttpRequest/abort-during-open.htm"
}, },
{
"path": "XMLHttpRequest/abort-during-open.worker.js",
"url": "/XMLHttpRequest/abort-during-open.worker"
},
{ {
"path": "XMLHttpRequest/abort-during-unsent.htm", "path": "XMLHttpRequest/abort-during-unsent.htm",
"url": "/XMLHttpRequest/abort-during-unsent.htm" "url": "/XMLHttpRequest/abort-during-unsent.htm"
@ -12613,6 +12657,10 @@
"path": "XMLHttpRequest/send-authentication-basic-repeat-no-args.htm", "path": "XMLHttpRequest/send-authentication-basic-repeat-no-args.htm",
"url": "/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm" "url": "/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm"
}, },
{
"path": "XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm",
"url": "/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm"
},
{ {
"path": "XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm", "path": "XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm",
"url": "/XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm" "url": "/XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm"
@ -12633,6 +12681,10 @@
"path": "XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm", "path": "XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm",
"url": "/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm" "url": "/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm"
}, },
{
"path": "XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm",
"url": "/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm"
},
{ {
"path": "XMLHttpRequest/send-conditional.htm", "path": "XMLHttpRequest/send-conditional.htm",
"url": "/XMLHttpRequest/send-conditional.htm" "url": "/XMLHttpRequest/send-conditional.htm"
@ -12769,6 +12821,10 @@
"path": "XMLHttpRequest/send-send.htm", "path": "XMLHttpRequest/send-send.htm",
"url": "/XMLHttpRequest/send-send.htm" "url": "/XMLHttpRequest/send-send.htm"
}, },
{
"path": "XMLHttpRequest/send-send.worker.js",
"url": "/XMLHttpRequest/send-send.worker"
},
{ {
"path": "XMLHttpRequest/send-sync-blocks-async.htm", "path": "XMLHttpRequest/send-sync-blocks-async.htm",
"url": "/XMLHttpRequest/send-sync-blocks-async.htm" "url": "/XMLHttpRequest/send-sync-blocks-async.htm"
@ -13997,6 +14053,10 @@
"path": "dom/lists/DOMTokenList-stringifier.html", "path": "dom/lists/DOMTokenList-stringifier.html",
"url": "/dom/lists/DOMTokenList-stringifier.html" "url": "/dom/lists/DOMTokenList-stringifier.html"
}, },
{
"path": "dom/lists/DOMTokenList-value.html",
"url": "/dom/lists/DOMTokenList-value.html"
},
{ {
"path": "dom/nodes/CharacterData-appendData.html", "path": "dom/nodes/CharacterData-appendData.html",
"url": "/dom/nodes/CharacterData-appendData.html" "url": "/dom/nodes/CharacterData-appendData.html"
@ -14701,6 +14761,10 @@
"path": "dom/ranges/Range-constructor.html", "path": "dom/ranges/Range-constructor.html",
"url": "/dom/ranges/Range-constructor.html" "url": "/dom/ranges/Range-constructor.html"
}, },
{
"path": "dom/ranges/Range-stringifier.html",
"url": "/dom/ranges/Range-stringifier.html"
},
{ {
"path": "dom/traversal/NodeFilter-constants.html", "path": "dom/traversal/NodeFilter-constants.html",
"url": "/dom/traversal/NodeFilter-constants.html" "url": "/dom/traversal/NodeFilter-constants.html"
@ -15501,6 +15565,10 @@
"path": "fetch/api/request/request-clone.sub.html", "path": "fetch/api/request/request-clone.sub.html",
"url": "/fetch/api/request/request-clone.sub.html" "url": "/fetch/api/request/request-clone.sub.html"
}, },
{
"path": "fetch/api/request/request-consume-empty.html",
"url": "/fetch/api/request/request-consume-empty.html"
},
{ {
"path": "fetch/api/request/request-consume.html", "path": "fetch/api/request/request-consume.html",
"url": "/fetch/api/request/request-consume.html" "url": "/fetch/api/request/request-consume.html"
@ -15541,6 +15609,10 @@
"path": "fetch/api/response/response-clone.html", "path": "fetch/api/response/response-clone.html",
"url": "/fetch/api/response/response-clone.html" "url": "/fetch/api/response/response-clone.html"
}, },
{
"path": "fetch/api/response/response-consume-empty.html",
"url": "/fetch/api/response/response-consume-empty.html"
},
{ {
"path": "fetch/api/response/response-consume.html", "path": "fetch/api/response/response-consume.html",
"url": "/fetch/api/response/response-consume.html" "url": "/fetch/api/response/response-consume.html"
@ -16265,6 +16337,14 @@
"path": "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html", "path": "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html",
"url": "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html" "url": "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html"
}, },
{
"path": "html/browsers/the-window-object/Document-defaultView.html",
"url": "/html/browsers/the-window-object/Document-defaultView.html"
},
{
"path": "html/browsers/the-window-object/Window-document.html",
"url": "/html/browsers/the-window-object/Window-document.html"
},
{ {
"path": "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-01.html", "path": "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-01.html",
"url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-01.html" "url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-01.html"
@ -16277,6 +16357,10 @@
"path": "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html", "path": "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html",
"url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html" "url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html"
}, },
{
"path": "html/browsers/the-window-object/accessing-other-browsing-contexts/iterator.html",
"url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/iterator.html"
},
{ {
"path": "html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html", "path": "html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html",
"url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html" "url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html"
@ -18713,6 +18797,10 @@
"path": "html/semantics/forms/form-control-infrastructure/form.html", "path": "html/semantics/forms/form-control-infrastructure/form.html",
"url": "/html/semantics/forms/form-control-infrastructure/form.html" "url": "/html/semantics/forms/form-control-infrastructure/form.html"
}, },
{
"path": "html/semantics/forms/form-submission-0/getactionurl.html",
"url": "/html/semantics/forms/form-submission-0/getactionurl.html"
},
{ {
"path": "html/semantics/forms/form-submission-0/url-encoded.html", "path": "html/semantics/forms/form-submission-0/url-encoded.html",
"url": "/html/semantics/forms/form-submission-0/url-encoded.html" "url": "/html/semantics/forms/form-submission-0/url-encoded.html"
@ -18841,10 +18929,6 @@
"path": "html/semantics/forms/the-input-element/hidden.html", "path": "html/semantics/forms/the-input-element/hidden.html",
"url": "/html/semantics/forms/the-input-element/hidden.html" "url": "/html/semantics/forms/the-input-element/hidden.html"
}, },
{
"path": "html/semantics/forms/the-input-element/input-textselection-01.html",
"url": "/html/semantics/forms/the-input-element/input-textselection-01.html"
},
{ {
"path": "html/semantics/forms/the-input-element/input-type-button.html", "path": "html/semantics/forms/the-input-element/input-type-button.html",
"url": "/html/semantics/forms/the-input-element/input-type-button.html" "url": "/html/semantics/forms/the-input-element/input-type-button.html"
@ -18901,6 +18985,10 @@
"path": "html/semantics/forms/the-input-element/search_input.html", "path": "html/semantics/forms/the-input-element/search_input.html",
"url": "/html/semantics/forms/the-input-element/search_input.html" "url": "/html/semantics/forms/the-input-element/search_input.html"
}, },
{
"path": "html/semantics/forms/the-input-element/selection.html",
"url": "/html/semantics/forms/the-input-element/selection.html"
},
{ {
"path": "html/semantics/forms/the-input-element/telephone.html", "path": "html/semantics/forms/the-input-element/telephone.html",
"url": "/html/semantics/forms/the-input-element/telephone.html" "url": "/html/semantics/forms/the-input-element/telephone.html"
@ -19289,6 +19377,10 @@
"path": "html/semantics/selectors/pseudo-classes/enabled.html", "path": "html/semantics/selectors/pseudo-classes/enabled.html",
"url": "/html/semantics/selectors/pseudo-classes/enabled.html" "url": "/html/semantics/selectors/pseudo-classes/enabled.html"
}, },
{
"path": "html/semantics/selectors/pseudo-classes/focus-autofocus.html",
"url": "/html/semantics/selectors/pseudo-classes/focus-autofocus.html"
},
{ {
"path": "html/semantics/selectors/pseudo-classes/focus.html", "path": "html/semantics/selectors/pseudo-classes/focus.html",
"url": "/html/semantics/selectors/pseudo-classes/focus.html" "url": "/html/semantics/selectors/pseudo-classes/focus.html"
@ -19633,6 +19725,10 @@
"path": "html/webappapis/scripting/events/event-handler-onresize.html", "path": "html/webappapis/scripting/events/event-handler-onresize.html",
"url": "/html/webappapis/scripting/events/event-handler-onresize.html" "url": "/html/webappapis/scripting/events/event-handler-onresize.html"
}, },
{
"path": "html/webappapis/scripting/events/event-handler-processing-algorithm.html",
"url": "/html/webappapis/scripting/events/event-handler-processing-algorithm.html"
},
{ {
"path": "html/webappapis/scripting/events/event-handler-spec-example.html", "path": "html/webappapis/scripting/events/event-handler-spec-example.html",
"url": "/html/webappapis/scripting/events/event-handler-spec-example.html" "url": "/html/webappapis/scripting/events/event-handler-spec-example.html"
@ -20133,10 +20229,6 @@
"path": "mediacapture-streams/stream-api/mediastream/mediastream-removetrack.html", "path": "mediacapture-streams/stream-api/mediastream/mediastream-removetrack.html",
"url": "/mediacapture-streams/stream-api/mediastream/mediastream-removetrack.html" "url": "/mediacapture-streams/stream-api/mediastream/mediastream-removetrack.html"
}, },
{
"path": "mediacapture-streams/stream-api/mediastream/stream-ended.html",
"url": "/mediacapture-streams/stream-api/mediastream/stream-ended.html"
},
{ {
"path": "mediacapture-streams/stream-api/mediastream/video.html", "path": "mediacapture-streams/stream-api/mediastream/video.html",
"url": "/mediacapture-streams/stream-api/mediastream/video.html" "url": "/mediacapture-streams/stream-api/mediastream/video.html"
@ -21337,6 +21429,150 @@
"path": "notifications/permission.html", "path": "notifications/permission.html",
"url": "/notifications/permission.html" "url": "/notifications/permission.html"
}, },
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_autocomplete.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_autocomplete.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_list.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_list.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_valueasdate.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_valueasdate.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_valueasnumber.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/input_valueasnumber.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/select_length.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/select_length.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/select_selectedindex.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/Not_Use/select_selectedindex.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/button_checkvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/button_checkvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/button_labels.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/button_labels.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/button_setcustomvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/button_setcustomvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/button_validationmessage.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/button_validationmessage.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/button_validity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/button_validity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/button_willvalidate.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/button_willvalidate.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/fieldset_checkvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/fieldset_checkvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/fieldset_setcustomvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/fieldset_setcustomvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/fieldset_validationmessage.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/fieldset_validationmessage.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/fieldset_validity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/fieldset_validity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/fieldset_willvalidate.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/fieldset_willvalidate.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/form_action.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/form_action.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/form_checkvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/form_checkvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/form_length.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/form_length.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/form_submit.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/form_submit.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_checkvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_checkvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_height.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_height.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_labels.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_labels.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_setcustomvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_setcustomvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_stepdown.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_stepdown.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_stepup.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_stepup.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_validationmessage.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_validationmessage.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_validity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_validity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_value_invalidstateerr.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_value_invalidstateerr.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_valueasdate_invalidstateerr.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_valueasdate_invalidstateerr.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_valueasnumber_invalidstateerr.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_valueasnumber_invalidstateerr.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_width.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_width.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/input_willvalidate.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/input_willvalidate.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/keygen_checkvalidity.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/keygen_checkvalidity.html"
},
{
"path": "old-tests/submission/Infraware/Forms/contents/Forms/keygen_labels.html",
"url": "/old-tests/submission/Infraware/Forms/contents/Forms/keygen_labels.html"
},
{ {
"path": "old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm", "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm",
"url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm" "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm"
@ -27985,6 +28221,14 @@
"path": "touch-events/create-touch-touchlist.html", "path": "touch-events/create-touch-touchlist.html",
"url": "/touch-events/create-touch-touchlist.html" "url": "/touch-events/create-touch-touchlist.html"
}, },
{
"path": "touch-events/touch-globaleventhandler-interface.html",
"url": "/touch-events/touch-globaleventhandler-interface.html"
},
{
"path": "touch-events/touch-touchevent-constructor.html",
"url": "/touch-events/touch-touchevent-constructor.html"
},
{ {
"path": "typedarrays/ArrayBuffer_constructor.html", "path": "typedarrays/ArrayBuffer_constructor.html",
"url": "/typedarrays/ArrayBuffer_constructor.html" "url": "/typedarrays/ArrayBuffer_constructor.html"
@ -28137,6 +28381,18 @@
"path": "web-animations/animatable/animate.html", "path": "web-animations/animatable/animate.html",
"url": "/web-animations/animatable/animate.html" "url": "/web-animations/animatable/animate.html"
}, },
{
"path": "web-animations/animation-effect-timing/duration.html",
"url": "/web-animations/animation-effect-timing/duration.html"
},
{
"path": "web-animations/animation-effect-timing/getAnimations.html",
"url": "/web-animations/animation-effect-timing/getAnimations.html"
},
{
"path": "web-animations/animation-effect-timing/getComputedStyle.html",
"url": "/web-animations/animation-effect-timing/getComputedStyle.html"
},
{ {
"path": "web-animations/animation-node/animation-node-after.html", "path": "web-animations/animation-node/animation-node-after.html",
"url": "/web-animations/animation-node/animation-node-after.html" "url": "/web-animations/animation-node/animation-node-after.html"
@ -28189,6 +28445,14 @@
"path": "web-animations/keyframe-effect/effect-easing.html", "path": "web-animations/keyframe-effect/effect-easing.html",
"url": "/web-animations/keyframe-effect/effect-easing.html" "url": "/web-animations/keyframe-effect/effect-easing.html"
}, },
{
"path": "web-animations/keyframe-effect/getComputedTiming-currentIteration.html",
"url": "/web-animations/keyframe-effect/getComputedTiming-currentIteration.html"
},
{
"path": "web-animations/keyframe-effect/getComputedTiming-progress.html",
"url": "/web-animations/keyframe-effect/getComputedTiming-progress.html"
},
{ {
"path": "web-animations/keyframe-effect/getComputedTiming.html", "path": "web-animations/keyframe-effect/getComputedTiming.html",
"url": "/web-animations/keyframe-effect/getComputedTiming.html" "url": "/web-animations/keyframe-effect/getComputedTiming.html"
@ -30989,6 +31253,10 @@
"path": "webmessaging/Channel_postMessage_target_source.htm", "path": "webmessaging/Channel_postMessage_target_source.htm",
"url": "/webmessaging/Channel_postMessage_target_source.htm" "url": "/webmessaging/Channel_postMessage_target_source.htm"
}, },
{
"path": "webmessaging/MessageEvent.html",
"url": "/webmessaging/MessageEvent.html"
},
{ {
"path": "webmessaging/MessageEvent_properties.htm", "path": "webmessaging/MessageEvent_properties.htm",
"url": "/webmessaging/MessageEvent_properties.htm" "url": "/webmessaging/MessageEvent_properties.htm"
@ -34516,42 +34784,7 @@
}, },
"local_changes": { "local_changes": {
"deleted": [], "deleted": [],
"items": { "items": {},
"manual": {
"uievents/order-of-events/mouse-events/mouseover-out-manual.html": [
{
"path": "uievents/order-of-events/mouse-events/mouseover-out-manual.html",
"url": "/uievents/order-of-events/mouse-events/mouseover-out-manual.html"
}
]
},
"testharness": {
"dom/lists/DOMTokenList-value.html": [
{
"path": "dom/lists/DOMTokenList-value.html",
"url": "/dom/lists/DOMTokenList-value.html"
}
],
"dom/ranges/Range-stringifier.html": [
{
"path": "dom/ranges/Range-stringifier.html",
"url": "/dom/ranges/Range-stringifier.html"
}
],
"html/semantics/forms/form-submission-0/getactionurl.html": [
{
"path": "html/semantics/forms/form-submission-0/getactionurl.html",
"url": "/html/semantics/forms/form-submission-0/getactionurl.html"
}
],
"html/webappapis/scripting/events/event-handler-processing-algorithm.html": [
{
"path": "html/webappapis/scripting/events/event-handler-processing-algorithm.html",
"url": "/html/webappapis/scripting/events/event-handler-processing-algorithm.html"
}
]
}
},
"reftest_nodes": {} "reftest_nodes": {}
}, },
"reftest_nodes": { "reftest_nodes": {
@ -37039,6 +37272,18 @@
"url": "/html/rendering/non-replaced-elements/tables/table-border-2.html" "url": "/html/rendering/non-replaced-elements/tables/table-border-2.html"
} }
], ],
"html/rendering/non-replaced-elements/tables/table-cell-width-s.html": [
{
"path": "html/rendering/non-replaced-elements/tables/table-cell-width-s.html",
"references": [
[
"/html/rendering/non-replaced-elements/tables/table-cell-width-ref.html",
"=="
]
],
"url": "/html/rendering/non-replaced-elements/tables/table-cell-width-s.html"
}
],
"html/rendering/non-replaced-elements/tables/table-cell-width.html": [ "html/rendering/non-replaced-elements/tables/table-cell-width.html": [
{ {
"path": "html/rendering/non-replaced-elements/tables/table-cell-width.html", "path": "html/rendering/non-replaced-elements/tables/table-cell-width.html",
@ -37075,6 +37320,18 @@
"url": "/html/rendering/non-replaced-elements/tables/table-width-150percent.html" "url": "/html/rendering/non-replaced-elements/tables/table-width-150percent.html"
} }
], ],
"html/rendering/non-replaced-elements/tables/table-width-s.html": [
{
"path": "html/rendering/non-replaced-elements/tables/table-width-s.html",
"references": [
[
"/html/rendering/non-replaced-elements/tables/table-width-ref.html",
"=="
]
],
"url": "/html/rendering/non-replaced-elements/tables/table-width-s.html"
}
],
"html/rendering/non-replaced-elements/tables/table-width.html": [ "html/rendering/non-replaced-elements/tables/table-width.html": [
{ {
"path": "html/rendering/non-replaced-elements/tables/table-width.html", "path": "html/rendering/non-replaced-elements/tables/table-width.html",
@ -40676,7 +40933,7 @@
} }
] ]
}, },
"rev": "efa05bfb3b338ef988f3ebf4523198512a248a99", "rev": "66c4613f823c4384c78ada77346eda17bb128947",
"url_base": "/", "url_base": "/",
"version": 2 "version": 2
} }

View file

@ -0,0 +1,5 @@
[send-authentication-cors-setrequestheader-no-cred.htm]
type: testharness
[CORS request with setRequestHeader auth to URL accepting Authorization header]
expected: FAIL

View file

@ -0,0 +1,26 @@
[Document-createAttribute.html]
type: testharness
[HTML document.createAttribute("title")]
expected: FAIL
[XML document.createAttribute("title")]
expected: FAIL
[HTML document.createAttribute("TITLE")]
expected: FAIL
[XML document.createAttribute("TITLE")]
expected: FAIL
[HTML document.createAttribute(null)]
expected: FAIL
[XML document.createAttribute(null)]
expected: FAIL
[HTML document.createAttribute(undefined)]
expected: FAIL
[XML document.createAttribute(undefined)]
expected: FAIL

View file

@ -0,0 +1,5 @@
[Document-createEvent.html]
type: testharness
[Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "KeyEvent"]
expected: FAIL

View file

@ -0,0 +1,5 @@
[Element-removeAttributeNS.html]
type: testharness
[removeAttributeNS should take a local name.]
expected: FAIL

View file

@ -0,0 +1,41 @@
[attributes.html]
type: testharness
[setAttribute should not change the order of previously set attributes.]
expected: FAIL
[setAttribute should set the first attribute with the given name]
expected: FAIL
[setAttribute should set the attribute with the given qualified name]
expected: FAIL
[null and the empty string should result in a null namespace.]
expected: FAIL
[XML-namespaced attributes don't need an xml prefix]
expected: FAIL
[xmlns should be allowed as local name]
expected: FAIL
[xmlns should be allowed as prefix in the XMLNS namespace]
expected: FAIL
[xmlns should be allowed as qualified name in the XMLNS namespace]
expected: FAIL
[Setting the same attribute with another prefix should not change the prefix]
expected: FAIL
[Attributes should work in document fragments.]
expected: FAIL
[Attribute values should not be parsed.]
expected: FAIL
[Specified attributes should be accessible.]
expected: FAIL
[Entities in attributes should have been expanded while parsing.]
expected: FAIL

View file

@ -0,0 +1,50 @@
[textdecoder-labels.html]
type: testharness
["ms932" => "shift_jis"]
expected: FAIL
[" ms932" => "shift_jis"]
expected: FAIL
["ms932 " => "shift_jis"]
expected: FAIL
[" ms932 " => "shift_jis"]
expected: FAIL
["\\tms932" => "shift_jis"]
expected: FAIL
["ms932\\t" => "shift_jis"]
expected: FAIL
["\\tms932\\t" => "shift_jis"]
expected: FAIL
["\\nms932" => "shift_jis"]
expected: FAIL
["ms932\\n" => "shift_jis"]
expected: FAIL
["\\nms932\\n" => "shift_jis"]
expected: FAIL
["\\fms932" => "shift_jis"]
expected: FAIL
["ms932\\f" => "shift_jis"]
expected: FAIL
["\\fms932\\f" => "shift_jis"]
expected: FAIL
["\\rms932" => "shift_jis"]
expected: FAIL
["ms932\\r" => "shift_jis"]
expected: FAIL
["\\rms932\\r" => "shift_jis"]
expected: FAIL

View file

@ -3,3 +3,6 @@
[location assign] [location assign]
expected: FAIL expected: FAIL
[URL that fails to parse]
expected: FAIL

View file

@ -0,0 +1,15 @@
[Document-defaultView.html]
type: testharness
expected: TIMEOUT
[Document created with the Document constructor]
expected: FAIL
[Document created with createDocument]
expected: FAIL
[Document created with createHTMLDocument]
expected: FAIL
[Document created with XML DOMParser]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[Window-document.html]
type: testharness
[Document in a browsing context]
expected: FAIL

View file

@ -0,0 +1,5 @@
[custom-attrs.html]
type: testharness
[Setting an Element's dataset property should not interfere with namespaced attributes with same name]
expected: FAIL

View file

@ -33,3 +33,12 @@
[[INPUT in COLOR status\] The value attribute cannot convert to a valid sample color] [[INPUT in COLOR status\] The value attribute cannot convert to a valid sample color]
expected: FAIL expected: FAIL
[[INPUT in DATETIME-LOCAL status\] The value attribute is empty]
expected: FAIL
[[INPUT in DATETIME-LOCAL status\] The value attribute is a valid date and time string]
expected: FAIL
[[INPUT in DATETIME-LOCAL status\] The value attribute cannot convert to a valid normalized forced-UTC global date and time string]
expected: FAIL

View file

@ -1,6 +1,5 @@
[textfieldselection-setSelectionRange.html] [textfieldselection-setSelectionRange.html]
type: testharness type: testharness
[textarea typeof(input.setSelectionRange)'] [textarea typeof(input.setSelectionRange)']
expected: FAIL expected: FAIL

View file

@ -1,71 +0,0 @@
[input-textselection-01.html]
type: testharness
[Selection attributes should apply to type text]
expected: FAIL
[Selection attributes should apply to type search]
expected: FAIL
[Selection attributes should apply to type url]
expected: FAIL
[Selection attributes should apply to type tel]
expected: FAIL
[Selection attributes should apply to type email]
expected: FAIL
[Selection attributes should apply to type password]
expected: FAIL
[Selection attributes should not apply to type hidden]
expected: FAIL
[Selection attributes should not apply to type datetime]
expected: FAIL
[Selection attributes should not apply to type date]
expected: FAIL
[Selection attributes should not apply to type month]
expected: FAIL
[Selection attributes should not apply to type week]
expected: FAIL
[Selection attributes should not apply to type datetime-local]
expected: FAIL
[Selection attributes should not apply to type number]
expected: FAIL
[Selection attributes should not apply to type range]
expected: FAIL
[Selection attributes should not apply to type color]
expected: FAIL
[Selection attributes should not apply to type checkbox]
expected: FAIL
[Selection attributes should not apply to type radio]
expected: FAIL
[Selection attributes should not apply to type button]
expected: FAIL
[Selection attributes should not apply to type file]
expected: FAIL
[Selection attributes should not apply to type submit]
expected: FAIL
[Selection attributes should not apply to type image]
expected: FAIL
[Selection attributes should not apply to type reset]
expected: FAIL
[Selection attributes should not apply to type email]
expected: FAIL

View file

@ -0,0 +1,134 @@
[selection.html]
type: testharness
[input type text should support the select() method]
expected: FAIL
[input type search should support the select() method]
expected: FAIL
[input type url should support the select() method]
expected: FAIL
[input type tel should support the select() method]
expected: FAIL
[input type email should support the select() method]
expected: FAIL
[input type password should support the select() method]
expected: FAIL
[input type date should support the select() method]
expected: FAIL
[input type month should support the select() method]
expected: FAIL
[input type week should support the select() method]
expected: FAIL
[input type time should support the select() method]
expected: FAIL
[input type datetime-local should support the select() method]
expected: FAIL
[input type number should support the select() method]
expected: FAIL
[input type color should support the select() method]
expected: FAIL
[input type file should support the select() method]
expected: FAIL
[input type hidden should not support the select() method]
expected: FAIL
[input type range should not support the select() method]
expected: FAIL
[input type checkbox should not support the select() method]
expected: FAIL
[input type radio should not support the select() method]
expected: FAIL
[input type submit should not support the select() method]
expected: FAIL
[input type image should not support the select() method]
expected: FAIL
[input type reset should not support the select() method]
expected: FAIL
[input type button should not support the select() method]
expected: FAIL
[input type text should support all selection attributes and methods]
expected: FAIL
[input type search should support all selection attributes and methods]
expected: FAIL
[input type url should support all selection attributes and methods]
expected: FAIL
[input type tel should support all selection attributes and methods]
expected: FAIL
[input type password should support all selection attributes and methods]
expected: FAIL
[input type hidden should not support variable-length selections]
expected: FAIL
[input type email should not support variable-length selections]
expected: FAIL
[input type date should not support variable-length selections]
expected: FAIL
[input type month should not support variable-length selections]
expected: FAIL
[input type week should not support variable-length selections]
expected: FAIL
[input type time should not support variable-length selections]
expected: FAIL
[input type datetime-local should not support variable-length selections]
expected: FAIL
[input type number should not support variable-length selections]
expected: FAIL
[input type range should not support variable-length selections]
expected: FAIL
[input type color should not support variable-length selections]
expected: FAIL
[input type checkbox should not support variable-length selections]
expected: FAIL
[input type radio should not support variable-length selections]
expected: FAIL
[input type file should not support variable-length selections]
expected: FAIL
[input type submit should not support variable-length selections]
expected: FAIL
[input type image should not support variable-length selections]
expected: FAIL
[input type reset should not support variable-length selections]
expected: FAIL
[input type button should not support variable-length selections]
expected: FAIL

View file

@ -1,8 +1,5 @@
[template-as-a-descendant.html] [template-as-a-descendant.html]
type: testharness type: testharness
[Template element as a descendant of the FRAMESET element. Template element is created by innerHTML]
expected: FAIL
[Template element as an indirect descendant of the FRAMESET element. Template element is created by innerHTML] [Template element as an indirect descendant of the FRAMESET element. Template element is created by innerHTML]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,6 @@
[focus-autofocus.html]
type: testharness
expected: TIMEOUT
[:focus selector should work with an autofocused element.]
expected: NOTRUN

View file

@ -2,3 +2,4 @@
type: testharness type: testharness
[beforeunload listener returning null cancels event] [beforeunload listener returning null cancels event]
expected: FAIL expected: FAIL

View file

@ -1 +1 @@
26b40afe237f97ebd81d537e8ed1201c7c1e4011 183772583fcbb1f8103e8d6542a620134ba9182e

View file

@ -0,0 +1,8 @@
[create-touch-touchlist.html]
type: testharness
[document.createTouchList exists and correctly creates a TouchList from a single Touch]
expected: FAIL
[document.createTouchList exists and correctly creates a TouchList from two Touch objects]
expected: FAIL

View file

@ -0,0 +1,8 @@
[touch-globaleventhandler-interface.html]
type: testharness
[Touch events in GlobalEventHandlers]
expected: FAIL
[Touch events are GlobalEventHandlers' own property]
expected: FAIL

View file

@ -0,0 +1,11 @@
[touch-touchevent-constructor.html]
type: testharness
[Touch constructor exists and creates a Touch object with minimum properties]
expected: FAIL
[Touch constructor exists and creates a Touch object with requested properties]
expected: FAIL
[TouchEvent constructor exists and creates a TouchEvent object with requested properties]
expected: FAIL

View file

@ -1,3 +1,947 @@
[a-element-xhtml.xhtml] [a-element-xhtml.xhtml]
type: testharness type: testharness
expected: TIMEOUT [Parsing: <http://example\t.\norg> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:foo.com> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <\t :foo.com \n> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: < foo.com > against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <a:\t foo.com> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:0/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:b/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f: /c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:\n/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:999999/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: < \t> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:foo.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:foo.com\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:a> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:#> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#;?> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <?> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:23> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </:23> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <::> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <::23> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo://> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http::@c:29> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://&a:foo(b\]c@d:2/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo.com/\\@> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:\\\\foo.com\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:\\\\a\\b:c\\d@foo.com\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo:/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo://///////> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo:////://///> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <c:/foo> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <//foo/bar> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <[61:24:74\]:98> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:[61:27\]/:foo> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://[1::2\]:3:4> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://2001::1> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://2001::1\]> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://2001::1\]:80> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://[2001::1\]> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://[2001::1\]:80> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <https:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <file:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ws:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <wss:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <data:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftp:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <https:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftps:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <gopher:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ws:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <wss:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <data:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <javascript:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <mailto:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a/b/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a/ /c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a%2fc> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a/%2f/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#β> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <file:c:\\foo\\bar.html> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: < File:c|////foo\\bar.html> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <C|/foo/bar> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: </C|\\foo\\bar> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <//C|/foo/bar> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <//server/file> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <\\\\server\\file> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: </\\server/file> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file:///home/me> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <//> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <///> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <///test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://localhost> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://localhost/> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://localhost/test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file:test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <http://example.com/././foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/./.foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/.> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/./> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/../> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/..bar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/../ton> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/../../..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/../../../ton> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/%2e> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/%2e%2> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com////../..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar//../..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar//..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/%20foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%2> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%2zbar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%2©zbar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%41%7a> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo\t‘%91> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%00%51> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo\tbar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com\\\\foo\\\\bar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/@asdf%40> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/你好你好> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/‥/foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com//foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com//foo//bar> against <about:blank>]
expected: FAIL
[Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>]
expected: FAIL
[Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>]
expected: FAIL
[Parsing: <data:test# »> against <about:blank>]
expected: FAIL
[Parsing: <http://[www.google.com\]/> against <about:blank>]
expected: FAIL
[Parsing: <http://www.google.com> against <about:blank>]
expected: FAIL
[Parsing: <http://192.0x00A80001> against <about:blank>]
expected: FAIL
[Parsing: <http://www/foo%2Ehtml> against <about:blank>]
expected: FAIL
[Parsing: <http://www/foo/%2E/html> against <about:blank>]
expected: FAIL
[Parsing: <http://user:pass@/> against <about:blank>]
expected: FAIL
[Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>]
expected: FAIL
[Parsing: <http:\\\\www.google.com\\foo> against <about:blank>]
expected: FAIL
[Parsing: <http://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <http://foo:81/> against <about:blank>]
expected: FAIL
[Parsing: <httpa://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <http://foo:-80/> against <about:blank>]
expected: FAIL
[Parsing: <https://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <https://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <ftp://foo:21/> against <about:blank>]
expected: FAIL
[Parsing: <ftp://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <gopher://foo:70/> against <about:blank>]
expected: FAIL
[Parsing: <gopher://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:81/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:815/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:81/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:815/> against <about:blank>]
expected: FAIL
[Parsing: <http:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftp:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <https:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <madeupscheme:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <file:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftps:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <gopher:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ws:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <wss:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <data:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <javascript:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <mailto:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <http:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftp:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <https:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <madeupscheme:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftps:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <gopher:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ws:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <wss:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <data:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <javascript:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <mailto:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <http:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:a:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/a:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://a:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@pple.com> against <about:blank>]
expected: FAIL
[Parsing: <http::b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/:@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://user@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <https:@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:a:b@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/a:b@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://a:b@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http::@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:a:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/a:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://a:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://www.@pple.com> against <about:blank>]
expected: FAIL
[Parsing: <http:@:www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/@:www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@:www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: </> against <http://www.example.com/test>]
expected: FAIL
[Parsing: </test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <.> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <..> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <./test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <../test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <../aaa/test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <../../test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <中/test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <http://www.example2.com> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <//www.example2.com> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <file:...> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <file:..> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <file:a> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <http://ExAmPlE.CoM> against <http://other.com/>]
expected: FAIL
[Parsing: <http://example example.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://[\]> against <http://other.com/>]
expected: FAIL
[Parsing: <http://[:\]> against <http://other.com/>]
expected: FAIL
[Parsing: <http://GOO  goo.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://GOOgoo.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://www.foo。bar.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://﷐zyx.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://你好你好> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%zz%66%a.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%25> against <http://other.com/>]
expected: FAIL
[Parsing: <http://hello%00> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>]
expected: FAIL
[Parsing: <http://192.168.0.257> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>]
expected: FAIL
[Parsing: <http://192.168.0.1 hello> against <http://other.com/>]
expected: FAIL
[Parsing: <http://> against <http://other.com/>]
expected: FAIL
[Parsing: <http://[google.com\]> against <http://other.com/>]
expected: FAIL
[Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>]
expected: FAIL
[Parsing: <#> against <test:test>]
expected: FAIL
[Parsing: <#x> against <mailto:x@x.com>]
expected: FAIL
[Parsing: <#x> against <data:,>]
expected: FAIL
[Parsing: <#x> against <about:blank>]
expected: FAIL
[Parsing: <#> against <test:test?test>]
expected: FAIL
[Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>]
expected: FAIL
[Parsing: <https://@@@example> against <http://doesnotmatter/>]
expected: FAIL
[Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>]
expected: FAIL
[Parsing: </some/path> against <http://user@example.org/smth>]
expected: FAIL
[Parsing: <> against <http://user:pass@example.org:21/smth>]
expected: FAIL
[Parsing: </some/path> against <http://user:pass@example.org:21/smth>]
expected: FAIL
[Parsing: <i> against <sc:sd>]
expected: FAIL
[Parsing: <i> against <sc:sd/sd>]
expected: FAIL
[Parsing: <i> against <sc:/pa/pa>]
expected: FAIL
[Parsing: <i> against <sc://ho/pa>]
expected: FAIL
[Parsing: <i> against <sc:///pa/pa>]
expected: FAIL
[Parsing: <../i> against <sc:sd>]
expected: FAIL
[Parsing: <../i> against <sc:sd/sd>]
expected: FAIL
[Parsing: <../i> against <sc:/pa/pa>]
expected: FAIL
[Parsing: <../i> against <sc://ho/pa>]
expected: FAIL
[Parsing: <../i> against <sc:///pa/pa>]
expected: FAIL
[Parsing: </i> against <sc:sd>]
expected: FAIL
[Parsing: </i> against <sc:sd/sd>]
expected: FAIL
[Parsing: </i> against <sc:/pa/pa>]
expected: FAIL
[Parsing: </i> against <sc://ho/pa>]
expected: FAIL
[Parsing: </i> against <sc:///pa/pa>]
expected: FAIL
[Parsing: <?i> against <sc:sd>]
expected: FAIL
[Parsing: <?i> against <sc:sd/sd>]
expected: FAIL
[Parsing: <?i> against <sc:/pa/pa>]
expected: FAIL
[Parsing: <?i> against <sc://ho/pa>]
expected: FAIL
[Parsing: <?i> against <sc:///pa/pa>]
expected: FAIL
[Parsing: <#i> against <sc:sd>]
expected: FAIL
[Parsing: <#i> against <sc:sd/sd>]
expected: FAIL
[Parsing: <#i> against <sc:/pa/pa>]
expected: FAIL
[Parsing: <#i> against <sc://ho/pa>]
expected: FAIL
[Parsing: <#i> against <sc:///pa/pa>]
expected: FAIL
[Parsing: <about:/../> against <about:blank>]
expected: FAIL
[Parsing: <data:/../> against <about:blank>]
expected: FAIL
[Parsing: <javascript:/../> against <about:blank>]
expected: FAIL
[Parsing: <mailto:/../> against <about:blank>]
expected: FAIL
[Parsing: <sc://ñ.test/> against <about:blank>]
expected: FAIL
[Parsing: <sc:\\../> against <about:blank>]
expected: FAIL
[Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>]
expected: FAIL
[Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>]
expected: FAIL
[Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>]
expected: FAIL
[Parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>]
expected: FAIL

View file

@ -942,3 +942,6 @@
[Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>] [Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>]
expected: FAIL expected: FAIL
[Parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>]
expected: FAIL

View file

@ -195,3 +195,6 @@
[Parsing: <http://www/foo%2Ehtml> against <about:blank>] [Parsing: <http://www/foo%2Ehtml> against <about:blank>]
expected: FAIL expected: FAIL
[Parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>]
expected: FAIL

View file

@ -8,11 +8,7 @@
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="../support/Blob.js"></script> <script src="../support/Blob.js"></script>
<p><strong><a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=23683">Discussion</a>
is ongoing that will affect a number of the following tests.</strong>
<div id="log"></div> <div id="log"></div>
<!-- used by "platform object that supports indexed properties" tests -->
<iframe style="display:none"></iframe>
<script> <script>
test(function() { test(function() {
assert_true("Blob" in window, "window should have a Blob property."); assert_true("Blob" in window, "window should have a Blob property.");
@ -51,6 +47,10 @@ test(function() {
"FAIL", "FAIL",
new Date(), new Date(),
new RegExp(), new RegExp(),
{},
{ 0: "FAIL", length: 1 },
document.createElement("div"),
window,
]; ];
args.forEach(function(arg) { args.forEach(function(arg) {
assert_throws(new TypeError(), function() { assert_throws(new TypeError(), function() {
@ -60,18 +60,24 @@ test(function() {
}, "Passing non-objects, Dates and RegExps for blobParts should throw a TypeError."); }, "Passing non-objects, Dates and RegExps for blobParts should throw a TypeError.");
test_blob(function() { test_blob(function() {
return new Blob({}); return new Blob({
[Symbol.iterator]: Array.prototype[Symbol.iterator],
});
}, { }, {
expected: "", expected: "",
type: "", type: "",
desc: "A plain object should be treated as a sequence for the blobParts argument." desc: "A plain object with @@iterator should be treated as a sequence for the blobParts argument."
}); });
test_blob(function() { test_blob(function() {
return new Blob({ 0: "PASS", length: 1 }); return new Blob({
[Symbol.iterator]: Array.prototype[Symbol.iterator],
0: "PASS",
length: 1
});
}, { }, {
expected: "PASS", expected: "PASS",
type: "", type: "",
desc: "A plain object with a length property should be treated as a sequence for the blobParts argument." desc: "A plain object with @@iterator and a length property should be treated as a sequence for the blobParts argument."
}); });
test_blob(function() { test_blob(function() {
return new Blob(new String("xyz")); return new Blob(new String("xyz"));
@ -88,10 +94,14 @@ test_blob(function() {
desc: "A Uint8Array object should be treated as a sequence for the blobParts argument." desc: "A Uint8Array object should be treated as a sequence for the blobParts argument."
}); });
var test_error = { name: "test" }; var test_error = {
name: "test",
message: "test error",
};
test(function() { test(function() {
var obj = { var obj = {
[Symbol.iterator]: Array.prototype[Symbol.iterator],
get length() { throw test_error; } get length() { throw test_error; }
}; };
assert_throws(test_error, function() { assert_throws(test_error, function() {
@ -99,7 +109,7 @@ test(function() {
}); });
}, "The length getter should be invoked and any exceptions should be propagated."); }, "The length getter should be invoked and any exceptions should be propagated.");
test_blob(function() { test(function() {
var element = document.createElement("div"); var element = document.createElement("div");
element.appendChild(document.createElement("div")); element.appendChild(document.createElement("div"));
element.appendChild(document.createElement("p")); element.appendChild(document.createElement("p"));
@ -107,16 +117,15 @@ test_blob(function() {
Object.defineProperty(list, "length", { Object.defineProperty(list, "length", {
get: function() { throw test_error; } get: function() { throw test_error; }
}); });
return new Blob(list); assert_throws(test_error, function() {
}, { new Blob(list);
expected: "[object HTMLDivElement][object HTMLParagraphElement]", });
type: "", }, "A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten 'length'.)");
desc: "A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten 'length'.)"
});
test(function() { test(function() {
assert_throws(test_error, function() { assert_throws(test_error, function() {
var obj = { var obj = {
[Symbol.iterator]: Array.prototype[Symbol.iterator],
length: { length: {
valueOf: null, valueOf: null,
toString: function() { throw test_error; } toString: function() { throw test_error; }
@ -126,6 +135,7 @@ test(function() {
}); });
assert_throws(test_error, function() { assert_throws(test_error, function() {
var obj = { var obj = {
[Symbol.iterator]: Array.prototype[Symbol.iterator],
length: { valueOf: function() { throw test_error; } } length: { valueOf: function() { throw test_error; } }
}; };
new Blob(obj); new Blob(obj);
@ -135,6 +145,10 @@ test(function() {
test(function() { test(function() {
var received = []; var received = [];
var obj = { var obj = {
get [Symbol.iterator]() {
received.push("Symbol.iterator");
return Array.prototype[Symbol.iterator];
},
get length() { get length() {
received.push("length getter"); received.push("length getter");
return { return {
@ -166,15 +180,18 @@ test(function() {
new Blob(obj); new Blob(obj);
}); });
assert_array_equals(received, [ assert_array_equals(received, [
"Symbol.iterator",
"length getter", "length getter",
"length valueOf", "length valueOf",
"0 getter", "0 getter",
"0 toString", "0 toString",
"1 getter" "length getter",
"length valueOf",
"1 getter",
]); ]);
}, "Getters and value conversions should happen in order until an exception is thrown."); }, "Getters and value conversions should happen in order until an exception is thrown.");
// XXX should add tests edge cases of ToUint32(length) // XXX should add tests edge cases of ToLength(length)
test(function() { test(function() {
assert_throws(test_error, function() { assert_throws(test_error, function() {
@ -201,7 +218,7 @@ test_blob(function() {
]; ];
return new Blob(arr); return new Blob(arr);
}, { }, {
expected: "PASSundefined", expected: "PASS",
type: "", type: "",
desc: "Changes to the blobParts array should be reflected in the returned Blob (pop)." desc: "Changes to the blobParts array should be reflected in the returned Blob (pop)."
}); });
@ -211,19 +228,19 @@ test_blob(function() {
{ {
toString: function() { toString: function() {
if (arr.length === 3) { if (arr.length === 3) {
return "SS"; return "A";
} }
arr.unshift({ arr.unshift({
toString: function() { toString: function() {
assert_unreached("Should only access index 0 once."); assert_unreached("Should only access index 0 once.");
} }
}); });
return "PA"; return "P";
} }
}, },
{ {
toString: function() { toString: function() {
assert_unreached("Should not access the final element."); return "SS";
} }
} }
]; ];
@ -297,29 +314,6 @@ test_blob(function() {
desc: "Passing a Float64Array as element of the blobParts array should work." desc: "Passing a Float64Array as element of the blobParts array should work."
}); });
test_blob(function() {
return new Blob(document.createElement("div"));
}, {
expected: "",
type: "",
desc: "Passing an element as the blobParts array should work."
});
test_blob(function() {
return new Blob(window);
}, {
expected: "[object Window]",
type: "",
desc: "Passing an platform object that supports indexed properties as the blobParts array should work (window)."
});
test_blob(function() {
window[0].toString = function() { return "foo"; };
return new Blob(window);
}, {
expected: "foo",
type: "",
desc: "Passing an platform object that supports indexed properties as the blobParts array should work (window with custom toString)."
});
test_blob(function() { test_blob(function() {
var select = document.createElement("select"); var select = document.createElement("select");
select.appendChild(document.createElement("option")); select.appendChild(document.createElement("option"));

View file

@ -0,0 +1,14 @@
importScripts("/resources/testharness.js");
async_test(function() {
var data = "TEST";
var blob = new Blob([data], {type: "text/plain"});
var reader = new FileReader();
reader.onload = this.step_func_done(function() {
assert_equals(reader.result, data);
});
reader.onerror = this.unreached_func("Unexpected error event");
reader.readAsText(blob);
}, "Create Blob in Worker");
done();

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Blob slice overflow</title>
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="help" href="https://w3c.github.io/FileAPI/#dfn-slice">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
var text = '';
for (var i = 0; i < 2000; ++i) {
text += 'A';
}
test(function() {
var blob = new Blob([text]);
var sliceBlob = blob.slice(-1, 2000);
assert_equals(sliceBlob.size, 2000-(2000-1), "Bolb slice size");
}, "slice start is negative, relativeStart will be max((size + start), 0)");
test(function() {
var blob = new Blob([text]);
var sliceBlob = blob.slice(2001, 2000);
assert_equals(sliceBlob.size, 0, "Bolb slice size");
}, "slice start is greater than blob size, relativeStart will be min(start, size)");
test(function() {
var blob = new Blob([text]);
var sliceBlob = blob.slice(1998, -1);
assert_equals(sliceBlob.size, (2000-1)-1998, "Bolb slice size");
}, "slice end is negative, relativeEnd will be max((size + end), 0)");
test(function() {
var blob = new Blob([text]);
var sliceBlob = blob.slice(1998, 2999);
assert_equals(sliceBlob.size, 2000-1998, "Bolb slice size");
}, "slice end is greater than blob size, relativeEnd will be min(end, size)");
</script>

View file

@ -0,0 +1,15 @@
importScripts("/resources/testharness.js");
async_test(function() {
var file = new File(["bits"], "dummy", { 'type': 'text/plain', lastModified: 42 });
var reader = new FileReader();
reader.onload = this.step_func_done(function() {
assert_equals(file.name, "dummy", "file name");
assert_equals(reader.result, "bits", "file content");
assert_equals(file.lastModified, 42, "file lastModified");
});
reader.onerror = this.unreached_func("Unexpected error event");
reader.readAsText(file);
}, "FileReader in Worker");
done();

View file

@ -5,4 +5,3 @@
@zqzhang @zqzhang
@yunxiaoxie @yunxiaoxie
@zhaozihao @zhaozihao
@foolip

View file

@ -0,0 +1,33 @@
<!doctype html>
<meta charset=utf-8>
<title></title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
test( function() {
var closedRange = IDBKeyRange.bound(5, 20);
assert_true(!!closedRange.includes, "IDBKeyRange has a .includes");
assert_true(closedRange.includes(7), "in range");
assert_false(closedRange.includes(1), "below range");
assert_false(closedRange.includes(42), "above range");
assert_true(closedRange.includes(5) && closedRange.includes(20),
"boundary points");
assert_throws("DataError", function() { closedRange.includes({}) },
"invalid key");
}, "IDBKeyRange.includes() with a closed range");
test( function() {
var openRange = IDBKeyRange.bound(5, 20, true, true);
assert_false(openRange.includes(5) || openRange.includes(20),
"boundary points");
}, "IDBKeyRange.includes() with an open range");
test( function() {
var range = IDBKeyRange.only(42);
assert_true(range.includes(42), "in range");
assert_false(range.includes(1), "below range");
assert_false(range.includes(9000), "above range");
}, "IDBKeyRange.includes() with an only range");
</script>

View file

@ -137,14 +137,6 @@ they will be under `html/browsers/history/the-history-interface/`.
Various resources that tests depend on are in `common`, `images`, and Various resources that tests depend on are in `common`, `images`, and
`fonts`. `fonts`.
If you're looking at a section of the specification and can't figure
out where the directory is for it in the tree, just run:
```
node tools/scripts/id2path.js your-id
```
Branches Branches
======== ========

View file

@ -9,21 +9,6 @@
</head> </head>
<body> <body>
<div id="log"></div> <div id="log"></div>
<script> <script src="abort-during-open.js"></script>
var test = async_test()
test.step(function() {
var client = new XMLHttpRequest()
client.open("GET", "...")
client.onreadystatechange = function() {
test.step(function() {
assert_unreached()
})
}
client.abort()
assert_equals(client.readyState, 0)
assert_throws("InvalidStateError", function() { client.send("test") }, "calling send() after abort()")
})
test.done()
</script>
</body> </body>
</html> </html>

View file

@ -0,0 +1,14 @@
var test = async_test()
test.step(function() {
var client = new XMLHttpRequest()
client.open("GET", "...")
client.onreadystatechange = function() {
test.step(function() {
assert_unreached()
})
}
client.abort()
assert_equals(client.readyState, 0)
assert_throws("InvalidStateError", function() { client.send("test") }, "calling send() after abort()")
})
test.done()

View file

@ -0,0 +1,3 @@
importScripts("/resources/testharness.js");
importScripts("abort-during-open.js");
done();

View file

@ -0,0 +1,20 @@
import imp
import os
def main(request, response):
response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin"));
response.headers.set('Access-Control-Allow-Credentials', 'true');
response.headers.set('Access-Control-Allow-Methods', 'GET');
response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass');
response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user');
auth = imp.load_source("", os.path.join(os.path.abspath(os.curdir),
"XMLHttpRequest",
"resources",
"authentication.py"))
if request.method == "OPTIONS":
return ""
else:
return auth.main(request, response)

View file

@ -0,0 +1,20 @@
import imp
import os
def main(request, response):
response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin"));
response.headers.set('Access-Control-Allow-Credentials', 'true');
response.headers.set('Access-Control-Allow-Methods', 'GET');
response.headers.set('Access-Control-Allow-Headers', 'x-user, x-pass');
response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user');
auth = imp.load_source("", os.path.join(os.path.abspath(os.curdir),
"XMLHttpRequest",
"resources",
"authentication.py"))
if request.method == "OPTIONS":
return ""
else:
return auth.main(request, response)

View file

@ -0,0 +1,10 @@
import imp
import os
here = os.path.split(os.path.abspath(__file__))[0]
def main(request, response):
auth = imp.load_source("", os.path.join(here,
"..",
"authentication.py"))
return auth.main(request, response)

View file

@ -0,0 +1,36 @@
<!doctype html>
<html>
<head>
<title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() and open() arguments (asserts header wins)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. -->
<link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" />
<link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." />
</head>
<body>
<div id="log"></div>
<script>
var test = async_test()
test.step(function() {
var client = new XMLHttpRequest(),
urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'),
user = token()
client.open("GET", location.protocol+'//'+urlstart + "resources/auth9/auth.py", false, 'open-' + user, 'open-pass')
client.setRequestHeader("x-user", user)
client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass"))
client.onreadystatechange = function () {
if (client.readyState < 4) {return}
test.step( function () {
assert_equals(client.responseText, user + '\npass')
assert_equals(client.status, 200)
assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT')
test.done()
})
}
client.send(null)
})
</script>
</body>
</html>

View file

@ -0,0 +1,61 @@
<!doctype html>
<html>
<head>
<title>XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() but not setting withCredentials (expects to succeed)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. -->
<link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" />
<link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." />
</head>
<body>
<div id="log"></div>
<script>
function doTest(desc, pathsuffix, conditionsFunc, errorFunc, endFunc) {
var test = async_test(desc)
test.step(function() {
var client = new XMLHttpRequest(),
urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'),
user = token()
client.open("GET", location.protocol + "//www1." + urlstart + "resources/" + pathsuffix, false)
client.setRequestHeader("x-user", user)
client.setRequestHeader("x-pass", 'pass')
client.setRequestHeader("Authorization", "Basic " + btoa(user + ":pass"))
client.onerror = test.step_func(errorFunc)
client.onreadystatechange = test.step_func(function () {
if(client.readyState < 4) {return}
conditionsFunc(client, test, user)
})
if(endFunc) {
client.onloadend = test.step_func(endFunc)
}
client.send(null)
})
}
doTest("CORS request with setRequestHeader auth to URL accepting Authorization header", "auth7/corsenabled.py", function (client, test, user) {
assert_true(client.responseText == (user + "\npass"), "responseText should contain the right user and password")
assert_equals(client.status, 200)
assert_equals(client.getResponseHeader("x-challenge"), "DID-NOT")
test.done()
}, function(){
assert_unreached("Cross-domain request is permitted and should not cause an error")
this.done()
})
var errorFired = false;
doTest("CORS request with setRequestHeader auth to URL NOT accepting Authorization header", "auth8/corsenabled-no-authorize.py", function (client, test, user) {
assert_equals(client.responseText, '')
assert_equals(client.status, 0)
}, function(e){
errorFired = true
assert_equals(e.type, 'error', 'Error event fires when Authorize is a user-set header but not allowed by the CORS endpoint')
}, function() {
assert_true(errorFired, 'The error event should fire')
this.done()
})
</script>
</body>
</html>

View file

@ -8,14 +8,6 @@
</head> </head>
<body> <body>
<div id="log"></div> <div id="log"></div>
<script> <script src="send-send.js"></script>
test(function() {
var client = new XMLHttpRequest()
client.open("GET", "resources/well-formed.xml")
client.send(null)
assert_throws("InvalidStateError", function() { client.send(null) })
client.abort()
})
</script>
</body> </body>
</html> </html>

View file

@ -0,0 +1,7 @@
test(function() {
var client = new XMLHttpRequest()
client.open("GET", "resources/well-formed.xml")
client.send(null)
assert_throws("InvalidStateError", function() { client.send(null) })
client.abort()
})

View file

@ -0,0 +1,3 @@
importScripts("/resources/testharness.js");
importScripts("send-send.js");
done();

View file

@ -2384,7 +2384,7 @@
"xhtml/elements/keygen/360-novalid.xhtml": "The \u201clabel\u201d element may contain at most one \u201cbutton\u201d, \u201cinput\u201d, \u201ckeygen\u201d, \u201cmeter\u201d, \u201coutput\u201d, \u201cprogress\u201d, \u201cselect\u201d, or \u201ctextarea\u201d descendant.", "xhtml/elements/keygen/360-novalid.xhtml": "The \u201clabel\u201d element may contain at most one \u201cbutton\u201d, \u201cinput\u201d, \u201ckeygen\u201d, \u201cmeter\u201d, \u201coutput\u201d, \u201cprogress\u201d, \u201cselect\u201d, or \u201ctextarea\u201d descendant.",
"xhtml/elements/keygen/361-novalid.xhtml": "The element \u201ckeygen\u201d must not appear as a descendant of the \u201ca\u201d element.", "xhtml/elements/keygen/361-novalid.xhtml": "The element \u201ckeygen\u201d must not appear as a descendant of the \u201ca\u201d element.",
"xhtml/elements/link/001-novalid.xhtml": "Element \u201clink\u201d is missing required attribute \u201chref\u201d.", "xhtml/elements/link/001-novalid.xhtml": "Element \u201clink\u201d is missing required attribute \u201chref\u201d.",
"xhtml/elements/menu/001-haswarn.xhtml": "The \u201cmenu\u201d element is not supported by browsers yet. It would probably be better to wait for implementations.", "xhtml/elements/menu/001-haswarn.xhtml": "The \u201cmenu\u201d element is not supported in all browsers. Please be sure to test, and consider using a polyfill.",
"xhtml/elements/menu/001-novalid.xhtml": "The \u201ccontextmenu\u201d attribute must refer to a \u201cmenu\u201d element.", "xhtml/elements/menu/001-novalid.xhtml": "The \u201ccontextmenu\u201d attribute must refer to a \u201cmenu\u201d element.",
"xhtml/elements/meter/010-novalid.xhtml": "The value of the \u201cmin\u201d attribute must be less than or equal to the value of the \u201cvalue\u201d attribute.", "xhtml/elements/meter/010-novalid.xhtml": "The value of the \u201cmin\u201d attribute must be less than or equal to the value of the \u201cvalue\u201d attribute.",
"xhtml/elements/meter/011-novalid.xhtml": "Element \u201cmeter\u201d is missing required attribute \u201cvalue\u201d.", "xhtml/elements/meter/011-novalid.xhtml": "Element \u201cmeter\u201d is missing required attribute \u201cvalue\u201d.",

View file

@ -224,33 +224,25 @@ information in one of two ways:
In order for the latter to work, a file must either have a name of the In order for the latter to work, a file must either have a name of the
form `{name}.sub.{ext}` e.g. `example-test.sub.html` or be referenced form `{name}.sub.{ext}` e.g. `example-test.sub.html` or be referenced
through a URL containing `pipe=sub` in the query string through a URL containing `pipe=sub` in the query string
e.g. `example-test.html?pipe=sub`. The substitution syntax uses {% raw %} `{{ e.g. `example-test.html?pipe=sub`. The substitution syntax uses `{{ }}`
}}` {% endraw %} to delimit items for substitution. For example to substitute in to delimit items for substitution. For example to substitute in
the host name on which the tests are running, one would write: the host name on which the tests are running, one would write:
{% raw %}
{{host}} {{host}}
{% endraw %}
As well as the host, one can get full domains, including subdomains As well as the host, one can get full domains, including subdomains
using the `domains` dictionary. For example: using the `domains` dictionary. For example:
{% raw %}
{{domains[www]}} {{domains[www]}}
{% endraw %}
would be replaced by the fully qualified domain name of the `www` would be replaced by the fully qualified domain name of the `www`
subdomain. Ports are also available on a per-protocol basis e.g. subdomain. Ports are also available on a per-protocol basis e.g.
{% raw %}
{{ports[ws][0]}} {{ports[ws][0]}}
{% endraw %}
is replaced with the first (and only) websockets port, whilst is replaced with the first (and only) websockets port, whilst
{% raw %}
{{ports[http][1]}} {{ports[http][1]}}
{% endraw %}
is replaced with the second HTTP port. is replaced with the second HTTP port.
@ -258,9 +250,7 @@ The request URL itself can be used as part of the substitution using
the `location` dictionary, which has entries matching the the `location` dictionary, which has entries matching the
`window.location` API. For example `window.location` API. For example
{% raw %}
{{location[host]}} {{location[host]}}
{% endraw %}
is replaced by `hostname:port` for the current request. is replaced by `hostname:port` for the current request.

View file

@ -1,4 +1,5 @@
@ayg @ayg
@foolip
@jdm @jdm
@Ms2ger @Ms2ger
@plehegar @plehegar

View file

@ -282,6 +282,7 @@ var encodingMap = {
], ],
"shift_jis": [ "shift_jis": [
"csshiftjis", "csshiftjis",
"ms932",
"ms_kanji", "ms_kanji",
"shift-jis", "shift-jis",
"shift_jis", "shift_jis",

View file

@ -33,11 +33,23 @@ function testAlias(arg, iface) {
"isTrusted should be initialized to false"); "isTrusted should be initialized to false");
}, "createEvent('" + arg + "') should be initialized correctly."); }, "createEvent('" + arg + "') should be initialized correctly.");
} }
aliases.forEach(function(alias) { for (var alias in aliases) {
testAlias(alias[0], alias[1]); var iface = aliases[alias];
testAlias(alias[0].toLowerCase(), alias[1]); testAlias(alias, iface);
testAlias(alias[0].toUpperCase(), alias[1]); testAlias(alias.toLowerCase(), iface);
}); testAlias(alias.toUpperCase(), iface);
if (!alias.endsWith("s")) {
var plural = alias + "s";
if (!(plural in aliases)) {
test(function () {
assert_throws("NOT_SUPPORTED_ERR", function () {
var evt = document.createEvent(plural);
});
}, 'Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "' + plural + '"');
}
}
}
test(function() { test(function() {
assert_throws("NOT_SUPPORTED_ERR", function() { assert_throws("NOT_SUPPORTED_ERR", function() {
@ -61,11 +73,73 @@ This list is not exhaustive.
*/ */
var someNonCreateableEvents = [ var someNonCreateableEvents = [
"AnimationEvent", "AnimationEvent",
"AnimationPlayerEvent",
"ApplicationCacheErrorEvent",
"AudioProcessingEvent",
"AutocompleteErrorEvent",
"BeforeInstallPromptEvent",
"BeforeUnloadEvent",
"BlobEvent",
"ClipboardEvent",
"CloseEvent",
"CompositionEvent",
"DeviceLightEvent",
"DeviceMotionEvent",
"DeviceOrientationEvent",
"DragEvent", "DragEvent",
"ErrorEvent", "ErrorEvent",
"ExtendableEvent",
"ExtendableMessageEvent",
"FetchEvent",
"FocusEvent", "FocusEvent",
"FontFaceSetLoadEvent",
"GamepadEvent",
"GeofencingEvent",
"HashChangeEvent",
"IDBVersionChangeEvent",
"InstallEvent",
"KeyEvent",
"MIDIConnectionEvent",
"MIDIMessageEvent",
"MediaEncryptedEvent",
"MediaKeyEvent",
"MediaKeyMessageEvent",
"MediaQueryListEvent",
"MediaStreamEvent",
"MediaStreamTrackEvent",
"MutationEvent",
"NotificationEvent",
"OfflineAudioCompletionEvent",
"OrientationEvent",
"PageTransitionEvent",
"PointerEvent", "PointerEvent",
"PopStateEvent",
"PresentationConnectionAvailableEvent",
"PresentationConnectionCloseEvent",
"ProgressEvent",
"PromiseRejectionEvent",
"PushEvent",
"RTCDTMFToneChangeEvent",
"RTCDataChannelEvent",
"RTCIceCandidateEvent",
"RelatedEvent",
"ResourceProgressEvent",
"SVGEvent",
"SVGZoomEvent",
"SecurityPolicyViolationEvent",
"ServicePortConnectEvent",
"ServiceWorkerMessageEvent",
"SpeechRecognitionError",
"SpeechRecognitionEvent",
"SpeechSynthesisEvent",
"StorageEvent",
"SyncEvent",
"TextEvent",
"TrackEvent",
"TransitionEvent", "TransitionEvent",
"WebGLContextEvent",
"WebKitAnimationEvent",
"WebKitTransitionEvent",
"WheelEvent" "WheelEvent"
]; ];
someNonCreateableEvents.forEach(function (eventInterface) { someNonCreateableEvents.forEach(function (eventInterface) {

View file

@ -1,14 +1,13 @@
var aliases = [ var aliases = {
["CustomEvent", "CustomEvent"], "CustomEvent": "CustomEvent",
["Event", "Event"], "Event": "Event",
["Events", "Event"], "Events": "Event",
["HTMLEvents", "Event"], "HTMLEvents": "Event",
["KeyboardEvent", "KeyboardEvent"], "KeyboardEvent": "KeyboardEvent",
["KeyEvents", "KeyboardEvent"], "MessageEvent": "MessageEvent",
["MessageEvent", "MessageEvent"], "MouseEvent": "MouseEvent",
["MouseEvent", "MouseEvent"], "MouseEvents": "MouseEvent",
["MouseEvents", "MouseEvent"], "TouchEvent": "TouchEvent",
["TouchEvent", "TouchEvent"], "UIEvent": "UIEvent",
["UIEvent", "UIEvent"], "UIEvents": "UIEvent"
["UIEvents", "UIEvent"] };
];

View file

@ -6,6 +6,7 @@ function attr_is(attr, v, ln, ns, p, n) {
assert_equals(attr.namespaceURI, ns) assert_equals(attr.namespaceURI, ns)
assert_equals(attr.prefix, p) assert_equals(attr.prefix, p)
assert_equals(attr.name, n) assert_equals(attr.name, n)
assert_equals(attr.nodeName, n);
assert_equals(attr.specified, true) assert_equals(attr.specified, true)
} }

View file

@ -1,2 +1,3 @@
@foolip
@inexorabletash @inexorabletash
@sideshowbarker @sideshowbarker

View file

@ -419,6 +419,7 @@ var encodings_table =
{ {
"labels": [ "labels": [
"csshiftjis", "csshiftjis",
"ms932",
"ms_kanji", "ms_kanji",
"shift-jis", "shift-jis",
"shift_jis", "shift_jis",

View file

@ -11,8 +11,6 @@ function streamBody(reader, test, count) {
} else { } else {
test.step(function() { test.step(function() {
assert_true(count >= 2, "Retrieve body progressively"); assert_true(count >= 2, "Retrieve body progressively");
test.done();
return;
}); });
} }
}); });
@ -20,16 +18,14 @@ function streamBody(reader, test, count) {
//simulate streaming: //simulate streaming:
//count is large enough to let the UA deliver the body before it is completely retrieved //count is large enough to let the UA deliver the body before it is completely retrieved
async_test(function(test) { promise_test(function(test) {
fetch(RESOURCES_DIR + "trickle.py?ms=30&count=100").then(function(resp) { return fetch(RESOURCES_DIR + "trickle.py?ms=30&count=100").then(function(resp) {
var count = 0; var count = 0;
if (resp.body) if (resp.body)
return streamBody(resp.body.getReader(), test, count); return streamBody(resp.body.getReader(), test, count);
else else
test.step(function() { test.step(function() {
assert_unreached( "Body does not exist in response"); assert_unreached( "Body does not exist in response");
test.done();
return;
}); });
}); });
}, "Stream response's body"); }, "Stream response's body");

View file

@ -25,7 +25,7 @@
var parameters = [null, 1]; var parameters = [null, 1];
parameters.forEach(function(parameter) { parameters.forEach(function(parameter) {
test(function() { test(function() {
assert_throws(new TypeError(), () => new Headers(parameter)); assert_throws(new TypeError(), function() { new Headers(parameter) });
}, "Create headers with " + parameter + " should throw"); }, "Create headers with " + parameter + " should throw");
}); });

View file

@ -0,0 +1,103 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Request consume empty bodies</title>
<meta name="help" href="https://fetch.spec.whatwg.org/#request">
<meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin">
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
function checkBodyText(request) {
return request.text().then(function(bodyAsText) {
assert_equals(bodyAsText, "", "Resolved value should be empty");
assert_false(request.bodyUsed);
});
}
function checkBodyBlob(request) {
return request.blob().then(function(bodyAsBlob) {
var promise = new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.onload = function(evt) {
resolve(reader.result)
};
reader.onerror = function() {
reject("Blob's reader failed");
};
reader.readAsText(bodyAsBlob);
});
return promise.then(function(body) {
assert_equals(body, "", "Resolved value should be empty");
assert_false(request.bodyUsed);
});
});
}
function checkBodyArrayBuffer(request) {
return request.arrayBuffer().then(function(bodyAsArrayBuffer) {
assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty");
assert_false(request.bodyUsed);
});
}
function checkBodyJSON(request) {
return request.json().then(
function(bodyAsJSON) {
assert_unreached("JSON parsing should fail");
},
function() {
assert_false(request.bodyUsed);
});
}
function checkBodyFormData(request) {
return request.formData().then(function(bodyAsFormData) {
assert_true(bodyAsFormData instanceof FormData, "Should receive a FormData");
assert_false(request.bodyUsed);
});
}
function checkRequestWithNoBody(bodyType, checkFunction) {
promise_test(function(test) {
var request = new Request("", {"method": "POST"});
assert_false(request.bodyUsed);
return checkFunction(request);
}, "Consume request's body as " + bodyType);
}
var formData = new FormData();
checkRequestWithNoBody("text", checkBodyText);
checkRequestWithNoBody("blob", checkBodyBlob);
checkRequestWithNoBody("arrayBuffer", checkBodyArrayBuffer);
checkRequestWithNoBody("json", checkBodyJSON);
checkRequestWithNoBody("formData", checkBodyFormData);
function checkRequestWithEmptyBody(bodyType, body, asText) {
promise_test(function(test) {
var request = new Request("", {"method": "POST", "body": body});
assert_false(request.bodyUsed, "bodyUsed is false at init");
if (asText) {
return request.text().then(function(bodyAsString) {
assert_equals(bodyAsString.length, 0, "Resolved value should be empty");
assert_true(request.bodyUsed, "bodyUsed is true after being consumed");
});
}
return request.arrayBuffer().then(function(bodyAsArrayBuffer) {
assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty");
assert_true(request.bodyUsed, "bodyUsed is true after being consumed");
});
}, "Consume empty " + bodyType + " request body as " + (asText ? "text" : "arrayBuffer"));
}
// FIXME: Add BufferSource, FormData and URLSearchParams.
checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), false);
checkRequestWithEmptyBody("text", "", false);
checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true);
checkRequestWithEmptyBody("text", "", true);
</script>
</body>
</html>

View file

@ -8,6 +8,7 @@
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr"> <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="../resources/utils.js"></script>
</head> </head>
<body> <body>
<script> <script>
@ -37,19 +38,9 @@
}); });
} }
<!-- Taken from https://developers.google.com -->
function str2ab(str) {
var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i=0, strLen=str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
function checkBodyArrayBuffer(request, expectedBody) { function checkBodyArrayBuffer(request, expectedBody) {
return request.arrayBuffer().then( function(bodyAsArrayBuffer) { return request.arrayBuffer().then(function(bodyAsArrayBuffer) {
assert_array_equals(bodyAsArrayBuffer, str2ab(expectedBody), "Retrieve and verify request's body"); validateBufferFromString(bodyAsArrayBuffer, expectedBody, "Retrieve and verify request's body");
assert_true(request.bodyUsed, "body as arrayBuffer: bodyUsed turned true"); assert_true(request.bodyUsed, "body as arrayBuffer: bodyUsed turned true");
}); });
} }
@ -79,12 +70,28 @@
var formData = new FormData(); var formData = new FormData();
formData.append("name", "value") formData.append("name", "value")
checkRequestBody("This is request's body", "text", checkBodyText); var textData = JSON.stringify("This is response's body");
checkRequestBody("This is request's body", "blob", checkBodyBlob); var blob = new Blob([textData], { "type" : "text/plain" });
checkRequestBody("This is request's body", "arrayBuffer", checkBodyArrayBuffer);
checkRequestBody(JSON.stringify("This is request's body"), "json", checkBodyJSON); checkRequestBody(textData, "text", checkBodyText);
checkRequestBody(textData, "blob", checkBodyBlob);
checkRequestBody(textData, "arrayBuffer", checkBodyArrayBuffer);
checkRequestBody(textData, "json", checkBodyJSON);
checkRequestBody(formData, "formData", checkBodyFormData); checkRequestBody(formData, "formData", checkBodyFormData);
function checkBlobResponseBody(blobBody, blobData, bodyType, checkFunction) {
promise_test(function(test) {
var response = new Response(blobBody);
assert_false(response.bodyUsed, "bodyUsed is false at init");
return checkFunction(response, blobData);
}, "Consume blob response's body as " + bodyType);
}
checkBlobResponseBody(blob, textData, "blob", checkBodyBlob);
checkBlobResponseBody(blob, textData, "text", checkBodyText);
checkBlobResponseBody(blob, textData, "json", checkBodyJSON);
checkBlobResponseBody(blob, textData, "arrayBuffer", checkBodyArrayBuffer);
var goodJSONValues = ["null", "1", "true", "\"string\""]; var goodJSONValues = ["null", "1", "true", "\"string\""];
goodJSONValues.forEach(function(value) { goodJSONValues.forEach(function(value) {
promise_test(function(test) { promise_test(function(test) {

View file

@ -23,18 +23,23 @@
} }
}, "Initialize Request with headers values"); }, "Initialize Request with headers values");
function makeRequestInit(body, method) {
return {"method": method, "body": body};
}
function checkRequestInit(body, bodyType, expectedTextBody) { function checkRequestInit(body, bodyType, expectedTextBody) {
promise_test(function(test) { promise_test(function(test) {
var request = new Request("", {"method": "POST", "body": body}); var request = new Request("", makeRequestInit(body, "POST"));
assert_throws(new TypeError(), if (body) {
function() { new Request("", {"method": "GET", "body": body}); } assert_throws(new TypeError(),
); function() { new Request("", makeRequestInit(body, "GET")); }
assert_throws(new TypeError(), );
function() { new Request("", {"method": "HEAD", "body": body}); } } else {
); new Request("", makeRequestInit(body, "GET")); // should not throw
}
var reqHeaders = request.headers; var reqHeaders = request.headers;
var mime = reqHeaders.get("Content-Type"); var mime = reqHeaders.get("Content-Type");
assert_true(mime && mime.search(bodyType) > -1, "Content-Type header should be \"" + bodyType + "\", not \"" + mime + "\""); assert_true(!body || (mime && mime.search(bodyType) > -1), "Content-Type header should be \"" + bodyType + "\", not \"" + mime + "\"");
return request.text().then(function(bodyAsText) { return request.text().then(function(bodyAsText) {
//not equals: cannot guess formData exact value //not equals: cannot guess formData exact value
assert_true( bodyAsText.search(expectedTextBody) > -1, "Retrieve and verify request body"); assert_true( bodyAsText.search(expectedTextBody) > -1, "Retrieve and verify request body");
@ -47,6 +52,8 @@
formaData.append("name", "value"); formaData.append("name", "value");
var usvString = "This is a USVString" var usvString = "This is a USVString"
checkRequestInit(undefined, undefined, "");
checkRequestInit(null, null, "");
checkRequestInit(blob, "application/octet-binary", "This is a blob"); checkRequestInit(blob, "application/octet-binary", "This is a blob");
checkRequestInit(formaData, "multipart/form-data", "name=\"name\"\r\n\r\nvalue"); checkRequestInit(formaData, "multipart/form-data", "name=\"name\"\r\n\r\nvalue");
checkRequestInit(usvString, "text/plain;charset=UTF-8", "This is a USVString"); checkRequestInit(usvString, "text/plain;charset=UTF-8", "This is a USVString");

View file

@ -44,25 +44,31 @@ function checkRequest(request, ExpectedValuesDict) {
} }
} }
//check reader's text content in an asyncronous test function stringToArray(str) {
function readTextStream(reader, asyncTest, expectedValue, retrievedText) { var array = new Uint8Array(str.length);
if (!retrievedText) for (var i=0, strLen = str.length; i < strLen; i++)
retrievedText = ""; array[i] = str.charCodeAt(i);
reader.read().then(function(data) { return array;
}
function validateBufferFromString(buffer, expectedValue, message)
{
return assert_array_equals(new Uint8Array(buffer), stringToArray(expectedValue), message);
}
function validateStreamFromString(reader, expectedValue, retrievedArrayBuffer) {
return reader.read().then(function(data) {
if (!data.done) { if (!data.done) {
var decoder = new TextDecoder(); var newBuffer;
retrievedText += decoder.decode(data.value); if (retrievedArrayBuffer) {
readTextStream(reader, asyncTest, expectedValue, retrievedText); newBuffer = new ArrayBuffer(data.value.length + retrievedArrayBuffer.length);
return; newBuffer.set(retrievedArrayBuffer, 0);
newBuffer.set(data.value, retrievedArrayBuffer.length);
} else {
newBuffer = data.value;
}
return validateStreamFromString(reader, expectedValue, newBuffer);
} }
asyncTest.step(function() { validateBufferFromString(retrievedArrayBuffer, expectedValue, "Retrieve and verify stream");
assert_equals(retrievedText, expectedValue, "Retrieve and verify stream");
asyncTest.done();
});
}).catch(function(e) {
asyncTest.step(function() {
assert_unreached("Cannot read stream " + e);
asyncTest.done();
});
}); });
} }

View file

@ -45,12 +45,12 @@
"Expect response.headers has name:value header"); "Expect response.headers has name:value header");
}, "Check Response's clone has the expected attribute values"); }, "Check Response's clone has the expected attribute values");
async_test(function(test) { promise_test(function(test) {
readTextStream(response.body.getReader(), test, body); return validateStreamFromString(response.body.getReader(), body);
}, "Check orginal response's body after cloning"); }, "Check orginal response's body after cloning");
async_test(function(test) { promise_test(function(test) {
readTextStream(clonedResponse.body.getReader(), test, body); return validateStreamFromString(clonedResponse.body.getReader(), body);
}, "Check cloned response's body"); }, "Check cloned response's body");
promise_test(function(test) { promise_test(function(test) {

View file

@ -0,0 +1,103 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Response consume empty bodies</title>
<meta name="help" href="https://fetch.spec.whatwg.org/#response">
<meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin">
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
function checkBodyText(response) {
return response.text().then(function(bodyAsText) {
assert_equals(bodyAsText, "", "Resolved value should be empty");
assert_false(response.bodyUsed);
});
}
function checkBodyBlob(response) {
return response.blob().then(function(bodyAsBlob) {
var promise = new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.onload = function(evt) {
resolve(reader.result)
};
reader.onerror = function() {
reject("Blob's reader failed");
};
reader.readAsText(bodyAsBlob);
});
return promise.then(function(body) {
assert_equals(body, "", "Resolved value should be empty");
assert_false(response.bodyUsed);
});
});
}
function checkBodyArrayBuffer(response) {
return response.arrayBuffer().then(function(bodyAsArrayBuffer) {
assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty");
assert_false(response.bodyUsed);
});
}
function checkBodyJSON(response) {
return response.json().then(
function(bodyAsJSON) {
assert_unreached("JSON parsing should fail");
},
function() {
assert_false(response.bodyUsed);
});
}
function checkBodyFormData(response) {
return response.formData().then(function(bodyAsFormData) {
assert_true(bodyAsFormData instanceof FormData, "Should receive a FormData");
assert_false(response.bodyUsed);
});
}
function checkResponseWithNoBody(bodyType, checkFunction) {
promise_test(function(test) {
var response = new Response();
assert_false(response.bodyUsed);
return checkFunction(response);
}, "Consume response's body as " + bodyType);
}
var formData = new FormData();
checkResponseWithNoBody("text", checkBodyText);
checkResponseWithNoBody("blob", checkBodyBlob);
checkResponseWithNoBody("arrayBuffer", checkBodyArrayBuffer);
checkResponseWithNoBody("json", checkBodyJSON);
checkResponseWithNoBody("formData", checkBodyFormData);
function checkResponseWithEmptyBody(bodyType, body, asText) {
promise_test(function(test) {
var response = new Response(body);
assert_false(response.bodyUsed, "bodyUsed is false at init");
if (asText) {
return response.text().then(function(bodyAsString) {
assert_equals(bodyAsString.length, 0, "Resolved value should be empty");
assert_true(response.bodyUsed, "bodyUsed is true after being consumed");
});
}
return response.arrayBuffer().then(function(bodyAsArrayBuffer) {
assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty");
assert_true(response.bodyUsed, "bodyUsed is true after being consumed");
});
}, "Consume empty " + bodyType + " response body as " + (asText ? "text" : "arrayBuffer"));
}
// FIXME: Add BufferSource, FormData and URLSearchParams.
checkResponseWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), false);
checkResponseWithEmptyBody("text", "", false);
checkResponseWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true);
checkResponseWithEmptyBody("text", "", true);
</script>
</body>
</html>

View file

@ -8,6 +8,7 @@
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr"> <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="../resources/utils.js"></script>
</head> </head>
<body> <body>
<script> <script>
@ -39,16 +40,14 @@
function checkBodyArrayBuffer(response, expectedBody) { function checkBodyArrayBuffer(response, expectedBody) {
return response.arrayBuffer().then( function(bodyAsArrayBuffer) { return response.arrayBuffer().then( function(bodyAsArrayBuffer) {
var decoder = new TextDecoder("utf-8"); validateBufferFromString(bodyAsArrayBuffer, expectedBody, "Retrieve and verify response's body");
var strBody = decoder.decode(bodyAsArrayBuffer);
assert_equals(strBody, expectedBody, "Retrieve and verify response's body");
assert_true(response.bodyUsed, "body as arrayBuffer: bodyUsed turned true"); assert_true(response.bodyUsed, "body as arrayBuffer: bodyUsed turned true");
}); });
} }
function checkBodyJson(response, expectedBody) { function checkBodyJSON(response, expectedBody) {
return response.json().then(function(bodyAsJson) { return response.json().then(function(bodyAsJSON) {
var strBody = JSON.stringify(bodyAsJson) var strBody = JSON.stringify(bodyAsJSON)
assert_equals(strBody, expectedBody, "Retrieve and verify response's body"); assert_equals(strBody, expectedBody, "Retrieve and verify response's body");
assert_true(response.bodyUsed, "body as json: bodyUsed turned true"); assert_true(response.bodyUsed, "body as json: bodyUsed turned true");
}); });
@ -70,12 +69,29 @@
} }
var formData = new FormData(); var formData = new FormData();
formData.append("name", "value") formData.append("name", "value");
checkResponseBody("This is response's body", "text", checkBodyText); var textData = JSON.stringify("This is response's body");
checkResponseBody("This is response's body", "blob", checkBodyBlob); var blob = new Blob([textData], { "type" : "text/plain" });
checkResponseBody("This is response's body", "arrayBuffer", checkBodyArrayBuffer);
checkResponseBody(JSON.stringify("This is response's body"), "json", checkBodyJson); checkResponseBody(textData, "text", checkBodyText);
checkResponseBody(textData, "blob", checkBodyBlob);
checkResponseBody(textData, "arrayBuffer", checkBodyArrayBuffer);
checkResponseBody(textData, "json", checkBodyJSON);
checkResponseBody(formData, "formData", checkBodyFormData); checkResponseBody(formData, "formData", checkBodyFormData);
function checkBlobResponseBody(blobBody, blobData, bodyType, checkFunction) {
promise_test(function(test) {
var response = new Response(blobBody);
assert_false(response.bodyUsed, "bodyUsed is false at init");
return checkFunction(response, blobData);
}, "Consume blob response's body as " + bodyType);
}
checkBlobResponseBody(blob, textData, "blob", checkBodyBlob);
checkBlobResponseBody(blob, textData, "text", checkBodyText);
checkBlobResponseBody(blob, textData, "json", checkBodyJSON);
checkBlobResponseBody(blob, textData, "arrayBuffer", checkBodyArrayBuffer);
</script> </script>
</body> </body>
</html> </html>

View file

@ -52,10 +52,10 @@
checkResponseInit(urlSearchParams, "application/x-www-form-urlencoded;charset=UTF-8", "name=value"); checkResponseInit(urlSearchParams, "application/x-www-form-urlencoded;charset=UTF-8", "name=value");
checkResponseInit(usvString, "text/plain;charset=UTF-8", "This is a USVString"); checkResponseInit(usvString, "text/plain;charset=UTF-8", "This is a USVString");
async_test(function(test) { promise_test(function(test) {
var body = "This is response body"; var body = "This is response body";
var response = new Response(body); var response = new Response(body);
readTextStream(response.body.getReader(), test, body); return validateStreamFromString(response.body.getReader(), body);
}, "Read Response's body as readableStream"); }, "Read Response's body as readableStream");
</script> </script>
</body> </body>

View file

@ -1,2 +1 @@
@plehegar @plehegar
@foolip

View file

@ -1,2 +1,3 @@
@foolip
@haoxli @haoxli
@zqzhang @zqzhang

View file

@ -1,4 +1,5 @@
@Ms2ger @Ms2ger
@foolip
@gsnedders @gsnedders
@jdm @jdm
@jgraham @jgraham

View file

@ -18,7 +18,7 @@
test(function () { test(function () {
var href = location.href; var href = location.href;
location.assign("http://:"); assert_throws('SYNTAX_ERR', function() { location.assign("http://:"); });
assert_equals(location.href, href); assert_equals(location.href, href);
}, "URL that fails to parse"); }, "URL that fails to parse");
</script> </script>

View file

@ -0,0 +1,38 @@
<!doctype html>
<meta charset=utf-8>
<title>Document#defaultView</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
test(function() {
assert_equals(document.defaultView, window);
}, "Document in a browsing context");
test(function() {
var d = new Document();
assert_equals(d.defaultView, null);
}, "Document created with the Document constructor");
test(function() {
var d = document.implementation.createDocument(null, null);
assert_equals(d.defaultView, null);
}, "Document created with createDocument");
test(function() {
var d = document.implementation.createHTMLDocument();
assert_equals(d.defaultView, null);
}, "Document created with createHTMLDocument");
test(function() {
var parser = new DOMParser();
var d = parser.parseFromString("<foo\/\>", "application/xml");
assert_equals(d.defaultView, null);
}, "Document created with XML DOMParser");
test(function() {
var parser = new DOMParser();
var d = parser.parseFromString("bar", "text/html");
assert_equals(d.defaultView, null);
}, "Document created with HTML DOMParser");
</script>

View file

@ -0,0 +1,25 @@
<!doctype html>
<meta charset=utf-8>
<title>Window#document</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
async_test(function() {
var URL = "/common/blank.html";
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
var initialWindow = iframe.contentWindow;
var initialDocument = initialWindow.document;
assert_equals(initialDocument.URL, "about:blank");
iframe.src = URL;
iframe.onload = this.step_func_done(function() {
assert_equals(iframe.contentWindow, initialWindow);
assert_equals(initialDocument.URL, "about:blank");
var loadedDocument = initialWindow.document;
assert_equals(loadedDocument.URL, location.href.replace(location.pathname, URL));
assert_not_equals(initialDocument, loadedDocument);
});
}, "Document in a browsing context");
</script>

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>window[@@iterator]</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
assert_false(Symbol.iterator in window);
});
</script>

View file

@ -0,0 +1,55 @@
<!doctype html>
<link rel="match" href="table-cell-width-ref.html">
<style>
body {
margin: 0;
}
table {
width: 400px;
border-collapse: collapse;
}
th {
font-weight: normal;
text-align: left;
}
td, th {
padding: 0;
}
td:first-child, th:first-child {
background-color: red;
}
</style>
<!-- width=0 should be treated as 'auto' -->
<table>
<tr>
<th width=0>a</th>
<th>a</th>
</tr>
</table>
<table>
<tr>
<td width=0>a</td>
<td>a</td>
</tr>
</table>
<!-- test valid width attribute value-->
<table>
<tr>
<th width=100>a</th>
<th>a</th>
</tr>
</table>
<table>
<tr>
<td width=100>a</td>
<td>a</td>
</tr>
</table>

View file

@ -0,0 +1,31 @@
<!doctype html>
<link rel="match" href="table-width-ref.html">
<style>
table {
border-collapse: collapse;
}
td {
padding: 0;
}
</style>
<!-- width=0 should be treated as 'auto' -->
<table width=0>
<tr>
<td>
a b
</td>
</tr>
</table>
<hr>
<table width=1>
<tr>
<td>
a b
</td>
</tr>
</table>

View file

@ -24,21 +24,21 @@ var testElements = [
}, },
{ {
tag: "input", tag: "input",
types: ["datetime"], types: ["datetime-local"],
testData: [ testData: [
{conditions: {value: ""}, expected: false, name: "[target] The value attribute is empty"}, {conditions: {value: ""}, expected: false, name: "[target] The value attribute is empty"},
{conditions: {value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] The value attribute is a valid date and time string"}, {conditions: {value: "2000-01-01T12:00:00"}, expected: false, name: "[target] The value attribute is a valid date and time string"},
{conditions: {value: "abc"}, expected: true, name: "[target] The value attribute cannot convert to a valid normalized forced-UTC global date and time string"} {conditions: {value: "abc"}, expected: false, name: "[target] The value attribute cannot convert to a valid normalized forced-UTC global date and time string"}
] ]
}, },
{ {
tag: "input", tag: "input",
types: ["color"], types: ["color"],
testData: [ testData: [
{conditions: {value: ""}, expected: true, name: "[target] The value attribute is empty"}, {conditions: {value: ""}, expected: false, name: "[target] The value attribute is empty"},
{conditions: {value: "#000000"}, expected: false, name: "[target] The value attribute is a valid sample color"}, {conditions: {value: "#000000"}, expected: false, name: "[target] The value attribute is a valid sample color"},
{conditions: {value: "#FFFFFF"}, expected: false, name: "[target] The value attribute is not a valid lowercase sample color"}, {conditions: {value: "#FFFFFF"}, expected: false, name: "[target] The value attribute is not a valid lowercase sample color"},
{conditions: {value: "abc"}, expected: true, name: "[target] The value attribute cannot convert to a valid sample color"} {conditions: {value: "abc"}, expected: false, name: "[target] The value attribute cannot convert to a valid sample color"}
] ]
}, },
]; ];

View file

@ -1,42 +0,0 @@
<!DOCTYPE HTML>
<title>The selection interface members</title>
<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#textFieldSelection">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
var valid = ["text", "search", "url", "tel", "password"];
var invalid = ["hidden", "datetime", "date", "month", "week", "datetime-local",
"number", "range", "color", "checkbox", "radio", "button",
"file", "email", "submit", "image", "reset"];
valid.forEach(function(aType) {
test(function() {
var input = document.createElement("input");
input.type = aType;
assert_equals(input.type, aType, "Input type unsupported")
input.select();
var a = input.selectionStart;
input.selectionStart = 0;
a = input.selectionEnd;
input.selectionEnd = 0;
input.setSelectionRange(0, 0);
}, "Selection attributes should apply to type " + aType)
})
invalid.forEach(function(aType) {
test(function() {
var input = document.createElement("input");
input.type = aType;
assert_equals(input.type, aType, "Input type unsupported")
assert_throws("INVALID_STATE_ERR", function() { input.select(); }, "Should throw with type " + aType);
assert_throws("INVALID_STATE_ERR", function() { var a = input.selectionStart; });
assert_throws("INVALID_STATE_ERR", function() { input.selectionStart = 0; });
assert_throws("INVALID_STATE_ERR", function() { var a = input.selectionEnd; });
assert_throws("INVALID_STATE_ERR", function() { input.selectionEnd = 0; });
assert_throws("INVALID_STATE_ERR", function() { input.setSelectionRange(0, 0); });
}, "Selection attributes should not apply to type " + aType)
})
});
</script>

View file

@ -0,0 +1,131 @@
<!DOCTYPE HTML>
<title>Input element programmatic selection support</title>
<link rel="author" title="yaycmyk" href="mailto:evan@yaycmyk.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/forms.html#dom-textarea/input-select">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
/* all textual, non-hidden inputs support .select() */
test(function() {
var valid = [
"text",
"search",
"url",
"tel",
"email",
"password",
"date",
"month",
"week",
"time",
"datetime-local",
"number",
"color",
"file",
];
var invalid = [
"hidden",
"range",
"checkbox",
"radio",
"submit",
"image",
"reset",
"button"
];
valid.forEach(function(type) {
test(function() {
var input = document.createElement("input");
var a;
input.type = type;
assert_equals(input.type, type, "the given input type is not supported");
input.select();
}, "input type " + type + " should support the select() method");
});
invalid.forEach(function(type) {
test(function() {
var input = document.createElement("input");
input.type = type;
assert_equals(input.type, type, "the given input type is not supported");
assert_throws("INVALID_STATE_ERR", function() { input.select(); });
}, "input type " + type + " should not support the select() method");
});
});
/* only certain input types are allowed to have a variable-length selection */
test(function() {
var valid = [
"text",
"search",
"url",
"tel",
"password"
];
var invalid = [
"hidden",
"email",
"date",
"month",
"week",
"time",
"datetime-local",
"number",
"range",
"color",
"checkbox",
"radio",
"file",
"submit",
"image",
"reset",
"button"
];
valid.forEach(function(type) {
test(function() {
var input = document.createElement("input");
var a;
input.type = type;
assert_equals(input.type, type, "the given input type is not supported");
a = input.selectionStart;
input.selectionStart = 0;
a = input.selectionEnd;
input.selectionEnd = 0;
input.setSelectionRange(0, 0);
input.setRangeText('', 0, 0);
}, "input type " + type + " should support all selection attributes and methods");
});
invalid.forEach(function(type) {
test(function() {
var input = document.createElement("input");
input.type = type;
assert_equals(input.type, type, "the given input type is not supported");
assert_throws("INVALID_STATE_ERR", function() { var a = input.selectionStart; });
assert_throws("INVALID_STATE_ERR", function() { input.selectionStart = 0; });
assert_throws("INVALID_STATE_ERR", function() { var a = input.selectionEnd; });
assert_throws("INVALID_STATE_ERR", function() { input.selectionEnd = 0; });
assert_throws("INVALID_STATE_ERR", function() { input.setSelectionRange(0, 0); });
assert_throws("INVALID_STATE_ERR", function() { input.setRangeText('', 0, 0); });
}, "input type " + type + " should not support variable-length selections");
});
});
</script>

View file

@ -32,8 +32,11 @@ test(function() {
assert_equals(template.ownerDocument, doc.body.ownerDocument, assert_equals(template.ownerDocument, doc.body.ownerDocument,
'Wrong template node owner document'); 'Wrong template node owner document');
assert_equals(template.content.ownerDocument, doc, var ownerDoc = template.content.ownerDocument;
'Wrong template content owner document'); assert_not_equals(ownerDoc, doc, 'Wrong template content owner document');
assert_not_equals(ownerDoc, document, 'Wrong template content owner document');
assert_equals(ownerDoc.defaultView, null,
'Template content owner document should not have a browsing context');
}, 'Parsing XHTML: Node\'s node document must be set to that of the element ' }, 'Parsing XHTML: Node\'s node document must be set to that of the element '
+ 'to which it will be appended. Test empty template'); + 'to which it will be appended. Test empty template');

View file

@ -22,6 +22,13 @@ function templateIsAChild(element) {
'Template element should be a descendant of the ' + element.tagName + ' element'); 'Template element should be a descendant of the ' + element.tagName + ' element');
} }
function templateIsDisallowedAsAChild(element) {
element.innerHTML = '<template>some text</template>';
assert_equals(element.querySelector('template'), null,
'Template element should not be allowed as a descendant of the ' + element.tagName + ' element');
}
function templateIsAnIndirectChild(element) { function templateIsAnIndirectChild(element) {
element.innerHTML = '<div><template>some text</template></div>'; element.innerHTML = '<div><template>some text</template></div>';
@ -29,6 +36,13 @@ function templateIsAnIndirectChild(element) {
'Template element should be a descendant of the ' + element.tagName + ' element'); 'Template element should be a descendant of the ' + element.tagName + ' element');
} }
function templateIsDisallowedAsAnIndirectChild(element) {
element.innerHTML = '<div><template>some text</template></div>';
assert_equals(element.querySelector('template'), null,
'Template element should not be allowed as indirect descendant of the ' + element.tagName + ' element');
}
function templateIsAnAppendedChild(doc, element) { function templateIsAnAppendedChild(doc, element) {
var template = doc.createElement('template'); var template = doc.createElement('template');
@ -58,13 +72,16 @@ var parameters = [['Template element as a descendant of the BODY element. ' +
['Template element as a descendant of the HEAD element. ' + ['Template element as a descendant of the HEAD element. ' +
'Template element is created by innerHTML', 'Template element is created by innerHTML',
doc.head], doc.head],
['Template element as a descendant of the FRAMESET element. ' +
'Template element is created by innerHTML',
frameset]
]; ];
generate_tests(templateIsAChild, parameters, generate_tests(templateIsAChild, parameters,
'Template element as a descendant of the HEAD, BODY and FRAMESET elements'); 'Template element as a descendant of the HEAD and BODY elements');
parameters = [['Template element as a descendant of the FRAMESET element. ' +
'Template element is created by innerHTML',
frameset],
];
generate_tests(templateIsDisallowedAsAChild, parameters,
'Template element should be disallowed as a descendant of the FRAMESET elements');
parameters = [['Template element as an indirect descendant of the BODY element. ' + parameters = [['Template element as an indirect descendant of the BODY element. ' +
@ -73,13 +90,17 @@ parameters = [['Template element as an indirect descendant of the BODY element.
['Template element as an indirect descendant of the HEAD element. ' + ['Template element as an indirect descendant of the HEAD element. ' +
'Template element is created by innerHTML', 'Template element is created by innerHTML',
doc.head], doc.head],
['Template element as an indirect descendant of the FRAMESET element. ' +
'Template element is created by innerHTML',
frameset]
]; ];
generate_tests(templateIsAnIndirectChild, parameters, generate_tests(templateIsAnIndirectChild, parameters,
'Template element as an indirect descendant of the HEAD, BODY and FRAMESET elements'); 'Template element as an indirect descendant of the HEAD, BODY and FRAMESET elements');
parameters = [['Template element as a descendant of the FRAMESET element. ' +
'Template element is created by innerHTML',
frameset],
];
generate_tests(templateIsDisallowedAsAnIndirectChild, parameters,
'Template element should be disallowed as an indirect descendant of the FRAMESET elements');
parameters = [['Template element as a descendant of the BODY element. ' + parameters = [['Template element as a descendant of the BODY element. ' +

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Selector: pseudo-classes (:focus for autofocus)</title>
<link rel="author" title="Kent Tamura" href="mailto:tkent@chromium.org">
<link rel=help href="https://html.spec.whatwg.org/multipage/#pseudo-classes">
<link rel=help href="https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
// This test can't be merged to focus.html because element.focus() may affect
// autofocus behavior.
var autofocusTest = async_test(":focus selector should work with an autofocused element.");
var input = document.createElement("input");
input.autofocus = true;
input.addEventListener("focus", function() {
autofocusTest.step(function() {
assert_array_equals(document.querySelectorAll(":focus"), [input])
autofocusTest.done();
});
}, false);
document.body.appendChild(input);
</script>
</body>

View file

@ -11,7 +11,6 @@
<button id=button1 type=submit>button1</button> <button id=button1 type=submit>button1</button>
<input id=input1> <input id=input1>
<input id=input2 disabled> <input id=input2 disabled>
<input id=input3 autofocus>
<textarea id=textarea1>textarea1</textarea> <textarea id=textarea1>textarea1</textarea>
<input type=checkbox id=checkbox1 checked> <input type=checkbox id=checkbox1 checked>
<input type=radio id=radio1 checked> <input type=radio id=radio1 checked>
@ -20,8 +19,6 @@
<iframe src="focus-iframe.html" id=iframe onload="load()"></iframe> <iframe src="focus-iframe.html" id=iframe onload="load()"></iframe>
<script> <script>
testSelector(":focus", ["input3"], "input3 has the attribute autofocus");
document.getElementById("input1").focus(); // set the focus on input1 document.getElementById("input1").focus(); // set the focus on input1
testSelector(":focus", ["input1"], "input1 has the focus"); testSelector(":focus", ["input1"], "input1 has the focus");

View file

@ -3,8 +3,8 @@
<head> <head>
<title>HTML Templates: additions to 'in frameset' insertion mode</title> <title>HTML Templates: additions to 'in frameset' insertion mode</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> <meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="If parser is in 'in frameset' insertion mode and meets frameset end tag then if the stack of open elements has a template element in html scope then this is a parse error; ignore the token"> <meta name="assert" content="If parser is in 'in frameset' insertion mode then a start tag or an end tag whose name is 'template' is a parsing error">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#in-head-addition"> <link rel="help" href="https://www.w3.org/TR/2015/WD-html51-20151008/syntax.html#parsing-main-inframeset">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="/html/resources/common.js"></script> <script src="/html/resources/common.js"></script>
@ -18,15 +18,9 @@ testInIFrame('/html/semantics/scripting-1/the-template-element/resources/framese
var doc = context.iframes[0].contentDocument; var doc = context.iframes[0].contentDocument;
var frameset = doc.querySelector('frameset'); var frameset = doc.querySelector('frameset');
assert_equals(frameset.children.length, 1, 'Wrong number of frameset children elements'); assert_equals(frameset.children.length, 0, 'Wrong number of frameset children elements');
var template = frameset.querySelector('template'); }, '<template> tag should be ignored in "in frameset" insertion mode');
assert_equals(template.tagName, 'TEMPLATE', 'FRAMESET should contain template element');
assert_equals(template.content.childNodes.length, 0,
'Template content should be empty');
}, '</frameset> tag should be ignored if there\'s TEMPLATE element in '
+ 'the stack of open elements');
</script> </script>
</body> </body>

View file

@ -66,26 +66,6 @@ test(function () {
test(function () {
var doc = newHTMLDocument();
doc.open();
doc.write('<frameset><template id="tmpl1"><div id="div">DIV</div></template></frameset>');
doc.close();
var template = doc.querySelector('#tmpl1');
var div = template.content.querySelector('#div');
assert_equals(div.ownerDocument, template.content.ownerDocument,
'Wrong ownerDocument of the element in template');
}, 'Test ownerDocument property of the element in a template. '
+ 'Current DOCUMENT has no browsing context. Test template element '
+ 'in the root of the frameset');
test(function () { test(function () {
var doc = newHTMLDocument(); var doc = newHTMLDocument();
doc.body.innerHTML = '<template id="tmpl1">' doc.body.innerHTML = '<template id="tmpl1">'

View file

@ -1,4 +1,5 @@
@bit @bit
@acolwell @acolwell
@foolip
@shishimaru @shishimaru
@sideshowbarker @sideshowbarker

View file

@ -1,3 +1,3 @@
@dontcallmedom
@alvestrand @alvestrand
@dontcallmedom
@foolip

View file

@ -1,25 +1,24 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<title>Adding a track to a finished MediaStream</title> <title>Adding a track to an inactive MediaStream</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> <link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrackList-add-void-MediaStreamTrack-track"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStream-addTrack-void-MediaStreamTrack-track">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrack-stop-void"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-stop-void">
<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
</head> </head>
<body> <body>
<p class="instructions">When prompted, accept to share your audio stream, then <p class="instructions">When prompted, accept to share your audio stream, then
your video stream.</p> your video stream.</p>
<h1 class="instructions">Description</h1> <h1 class="instructions">Description</h1>
<p class="instructions">This test checks that adding a track to a finished <p class="instructions">This test checks that adding a track to an inactive
MediaStream raises an INVALID_STATE_ERR exception.</p> MediaStream is allowed.</p>
<div id='log'></div> <div id='log'></div>
<script src=/resources/testharness.js></script> <script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script> <script src=/resources/testharnessreport.js></script>
<script src="/common/vendor-prefix.js" data-prefixed-objects='[{"ancestors":["navigator"], "name":"getUserMedia"}]'></script> <script src="/common/vendor-prefix.js" data-prefixed-objects='[{"ancestors":["navigator"], "name":"getUserMedia"}]'></script>
<script> <script>
var t = async_test("Tests that an addition to a finished MediaStream raises an exception", {timeout:20000}); var t = async_test("Tests that adding a track to an inactive MediaStream is allowed", {timeout:20000});
t.step(function () { t.step(function () {
var audio, video; var audio, video;
@ -33,13 +32,10 @@ t.step(function () {
video = stream; video = stream;
t.step(function () { t.step(function () {
audio.getAudioTracks()[0].stop(); audio.getAudioTracks()[0].stop();
assert_true(audio.ended, "Audio stream is ended after stopping its only audio track"); assert_false(audio.active, "audio stream is inactive after stopping its only audio track");
assert_throws("INVALID_STATE_ERR", function () { assert_true(video.active, "video stream is active");
video.addTrack(audio.getAudioTracks()[0]); audio.addTrack(video.getVideoTracks()[0]);
}, "Adding a track from a finished stream raises an INVALID_STATE_ERR exception"); audio.removeTrack(audio.getAudioTracks()[0]);
assert_throws("INVALID_STATE_ERR", function () {
audio.removeTrack(audio.getAudioTracks()[0]);
}, "Removing a track from a finished stream raises an INVALID_STATE_ERR exception");
}); });
t.done(); t.done();
} }

View file

@ -3,13 +3,12 @@
<head> <head>
<title>MediaStream constructor algorithm</title> <title>MediaStream constructor algorithm</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> <link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStream"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-MediaStream">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStream-id"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStream-id">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastream"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediastream">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastream-ended"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#event-mediastreamtrack-ended">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrack-stop-void"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-stop-void">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrack-clone-MediaStreamTrack"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-clone-MediaStreamTrack">
<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
</head> </head>
<body> <body>
<p class="instructions">When prompted, accept to share your video and audio stream.</p> <p class="instructions">When prompted, accept to share your video and audio stream.</p>
@ -42,7 +41,7 @@ t.step(function() {
assert_equals(stream3.getTrackById(audioTrack2.id), null, "an ended track doesn't get added via the MediaStream constructor"); assert_equals(stream3.getTrackById(audioTrack2.id), null, "an ended track doesn't get added via the MediaStream constructor");
assert_equals(stream3.getTrackById(videoTrack.id), videoTrack, "a non-ended track gets added via the MediaStream constructor even if the previous track was ended"); assert_equals(stream3.getTrackById(videoTrack.id), videoTrack, "a non-ended track gets added via the MediaStream constructor even if the previous track was ended");
var stream5 = new MediaStream([audioTrack2]); var stream5 = new MediaStream([audioTrack2]);
assert_true(stream5.ended, "a MediaStream created using the MediaStream() constructor whose arguments are lists of MediaStreamTrack objects that are all ended, the MediaStream object MUST be created with its ended attribute set to true"); assert_false(stream5.active, "a MediaStream created using the MediaStream() constructor whose arguments are lists of MediaStreamTrack objects that are all ended, the MediaStream object MUST be created with its active attribute set to false");
t.done(); t.done();
}), false); }), false);
audioTrack2.stop(); audioTrack2.stop();

View file

@ -1,37 +0,0 @@
<!doctype html>
<html>
<head>
<title>getUserMedia({video:true}) creates a stream with ended set to false</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStream-ended">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastream-ended">
<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
</head>
<body>
<p class="instructions">When prompted, accept to share your video stream.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that the MediaStream object returned by
the success callback in getUserMedia has a ended set to false at start, and
triggers "onended" when it is set to true.</p>
<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="/common/vendor-prefix.js" data-prefixed-objects='[{"ancestors":["navigator"], "name":"getUserMedia"}]'></script>
<script>
var t = async_test("Tests that a MediaStream handles ended correctly", {timeout:10000});
t.step(function () {
navigator.getUserMedia({video:true}, t.step_func(function (stream) {
assert_true(!stream.ended, "the media stream starts with ended set to false");
stream.addEventListener("ended", t.step_func(function() {
assert_true(stream.ended, "stream.ended now set to true");
t.done();
}), false);
stream.ended = true;
assert_true(!stream.ended, "stream.ended should remain false");
stream.getVideoTracks()[0].stop();
}), function (error) {});
});
</script>
</body>
</html>

View file

@ -3,8 +3,7 @@
<head> <head>
<title>Test that mediastreamtrack are properly ended</title> <title>Test that mediastreamtrack are properly ended</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> <link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack"> <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediastreamtrack">
<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
</head> </head>
<body> <body>
<p class="instructions">When prompted, accept to share your video and audio <p class="instructions">When prompted, accept to share your video and audio
@ -12,7 +11,7 @@ stream, and then revoke that permission.</p>
<h1 class="instructions">Description</h1> <h1 class="instructions">Description</h1>
<p class="instructions">This test checks that the video and audio tracks of <p class="instructions">This test checks that the video and audio tracks of
MediaStream object returned by the success callback in getUserMedia are MediaStream object returned by the success callback in getUserMedia are
correctly set into ended state when permission is revoked.</p> correctly set into inactive state when permission is revoked.</p>
<div id='log'></div> <div id='log'></div>
<script src=/resources/testharness.js></script> <script src=/resources/testharness.js></script>
@ -29,7 +28,7 @@ t.step(function () {
vidTrack.onended = t.step_func(function () { vidTrack.onended = t.step_func(function () {
assert_equals(vidTrack.readyState, "ended", "Video track has been ended as expected"); assert_equals(vidTrack.readyState, "ended", "Video track has been ended as expected");
assert_equals(audTrack.readyState, "ended", "Audio track has been ended as expected"); assert_equals(audTrack.readyState, "ended", "Audio track has been ended as expected");
assert_true(stream.ended, "MediaStream has been ended as expected"); assert_false(stream.active, "MediaStream has been inactive as expected");
t.done(); t.done();
}); });
}), function (error) {} }), function (error) {}

View file

@ -1,2 +1 @@
@plehegar @plehegar
@foolip

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

View file

@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<title>Forms</title> <title>Forms</title>
<script src="../../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
</head> </head>
<body> <body>
<p> <p>

Some files were not shown because too many files have changed in this diff Show more