mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Update web-platform-tests to revision 66c4613f823c4384c78ada77346eda17bb128947
This commit is contained in:
parent
183772583f
commit
a91433f0c8
234 changed files with 4368 additions and 967 deletions
|
@ -72,3 +72,9 @@
|
|||
[no-argument Blob constructor without 'new']
|
||||
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
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[Worker-read-file-constructor.worker]
|
||||
type: testharness
|
||||
[FileReader in Worker]
|
||||
expected: FAIL
|
||||
|
|
@ -3245,6 +3245,10 @@
|
|||
"path": "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",
|
||||
"url": "/vibration/cancel-when-hidden-manual.html"
|
||||
|
@ -4905,6 +4909,16 @@
|
|||
],
|
||||
"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",
|
||||
"references": [
|
||||
|
@ -4935,6 +4949,16 @@
|
|||
],
|
||||
"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",
|
||||
"references": [
|
||||
|
@ -11073,6 +11097,14 @@
|
|||
"path": "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",
|
||||
"url": "/FileAPI/blob/Blob-slice.html"
|
||||
|
@ -11081,6 +11113,10 @@
|
|||
"path": "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",
|
||||
"url": "/FileAPI/fileReader.html"
|
||||
|
@ -11741,6 +11777,10 @@
|
|||
"path": "IndexedDB/idbindex_openKeyCursor4.htm",
|
||||
"url": "/IndexedDB/idbindex_openKeyCursor4.htm"
|
||||
},
|
||||
{
|
||||
"path": "IndexedDB/idbkeyrange-includes.htm",
|
||||
"url": "/IndexedDB/idbkeyrange-includes.htm"
|
||||
},
|
||||
{
|
||||
"path": "IndexedDB/idbkeyrange.htm",
|
||||
"url": "/IndexedDB/idbkeyrange.htm"
|
||||
|
@ -12217,6 +12257,10 @@
|
|||
"path": "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",
|
||||
"url": "/XMLHttpRequest/abort-during-unsent.htm"
|
||||
|
@ -12613,6 +12657,10 @@
|
|||
"path": "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",
|
||||
"url": "/XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm"
|
||||
|
@ -12633,6 +12681,10 @@
|
|||
"path": "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",
|
||||
"url": "/XMLHttpRequest/send-conditional.htm"
|
||||
|
@ -12769,6 +12821,10 @@
|
|||
"path": "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",
|
||||
"url": "/XMLHttpRequest/send-sync-blocks-async.htm"
|
||||
|
@ -13997,6 +14053,10 @@
|
|||
"path": "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",
|
||||
"url": "/dom/nodes/CharacterData-appendData.html"
|
||||
|
@ -14701,6 +14761,10 @@
|
|||
"path": "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",
|
||||
"url": "/dom/traversal/NodeFilter-constants.html"
|
||||
|
@ -15501,6 +15565,10 @@
|
|||
"path": "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",
|
||||
"url": "/fetch/api/request/request-consume.html"
|
||||
|
@ -15541,6 +15609,10 @@
|
|||
"path": "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",
|
||||
"url": "/fetch/api/response/response-consume.html"
|
||||
|
@ -16265,6 +16337,14 @@
|
|||
"path": "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",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"url": "/html/semantics/forms/form-submission-0/url-encoded.html"
|
||||
|
@ -18841,10 +18929,6 @@
|
|||
"path": "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",
|
||||
"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",
|
||||
"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",
|
||||
"url": "/html/semantics/forms/the-input-element/telephone.html"
|
||||
|
@ -19289,6 +19377,10 @@
|
|||
"path": "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",
|
||||
"url": "/html/semantics/selectors/pseudo-classes/focus.html"
|
||||
|
@ -19633,6 +19725,10 @@
|
|||
"path": "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",
|
||||
"url": "/html/webappapis/scripting/events/event-handler-spec-example.html"
|
||||
|
@ -20133,10 +20229,6 @@
|
|||
"path": "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",
|
||||
"url": "/mediacapture-streams/stream-api/mediastream/video.html"
|
||||
|
@ -21337,6 +21429,150 @@
|
|||
"path": "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",
|
||||
"url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm"
|
||||
|
@ -27985,6 +28221,14 @@
|
|||
"path": "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",
|
||||
"url": "/typedarrays/ArrayBuffer_constructor.html"
|
||||
|
@ -28137,6 +28381,18 @@
|
|||
"path": "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",
|
||||
"url": "/web-animations/animation-node/animation-node-after.html"
|
||||
|
@ -28189,6 +28445,14 @@
|
|||
"path": "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",
|
||||
"url": "/web-animations/keyframe-effect/getComputedTiming.html"
|
||||
|
@ -30989,6 +31253,10 @@
|
|||
"path": "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",
|
||||
"url": "/webmessaging/MessageEvent_properties.htm"
|
||||
|
@ -34516,42 +34784,7 @@
|
|||
},
|
||||
"local_changes": {
|
||||
"deleted": [],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"items": {},
|
||||
"reftest_nodes": {}
|
||||
},
|
||||
"reftest_nodes": {
|
||||
|
@ -37039,6 +37272,18 @@
|
|||
"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": [
|
||||
{
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"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": [
|
||||
{
|
||||
"path": "html/rendering/non-replaced-elements/tables/table-width.html",
|
||||
|
@ -40676,7 +40933,7 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"rev": "efa05bfb3b338ef988f3ebf4523198512a248a99",
|
||||
"rev": "66c4613f823c4384c78ada77346eda17bb128947",
|
||||
"url_base": "/",
|
||||
"version": 2
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[Document-createEvent.html]
|
||||
type: testharness
|
||||
[Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "KeyEvent"]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[Element-removeAttributeNS.html]
|
||||
type: testharness
|
||||
[removeAttributeNS should take a local name.]
|
||||
expected: FAIL
|
||||
|
41
tests/wpt/metadata/dom/nodes/attributes.html.ini
Normal file
41
tests/wpt/metadata/dom/nodes/attributes.html.ini
Normal 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
|
||||
|
50
tests/wpt/metadata/encoding/textdecoder-labels.html.ini
Normal file
50
tests/wpt/metadata/encoding/textdecoder-labels.html.ini
Normal 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
|
||||
|
|
@ -3,3 +3,6 @@
|
|||
[location assign]
|
||||
expected: FAIL
|
||||
|
||||
[URL that fails to parse]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[Window-document.html]
|
||||
type: testharness
|
||||
[Document in a browsing context]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -33,3 +33,12 @@
|
|||
[[INPUT in COLOR status\] The value attribute cannot convert to a valid sample color]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[textfieldselection-setSelectionRange.html]
|
||||
type: testharness
|
||||
|
||||
[textarea typeof(input.setSelectionRange)']
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
[template-as-a-descendant.html]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
[focus-autofocus.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[:focus selector should work with an autofocused element.]
|
||||
expected: NOTRUN
|
||||
|
|
@ -2,3 +2,4 @@
|
|||
type: testharness
|
||||
[beforeunload listener returning null cancels event]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
26b40afe237f97ebd81d537e8ed1201c7c1e4011
|
||||
183772583fcbb1f8103e8d6542a620134ba9182e
|
|
@ -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
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[touch-globaleventhandler-interface.html]
|
||||
type: testharness
|
||||
[Touch events in GlobalEventHandlers]
|
||||
expected: FAIL
|
||||
|
||||
[Touch events are GlobalEventHandlers' own property]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -1,3 +1,947 @@
|
|||
[a-element-xhtml.xhtml]
|
||||
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://Go.com> against <http://other.com/>]
|
||||
expected: FAIL
|
||||
|
||||
[Parsing: <http://%41.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://%00.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://0Xc0.0250.01> 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
|
||||
|
||||
|
|
|
@ -942,3 +942,6 @@
|
|||
[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
|
||||
|
||||
|
|
|
@ -195,3 +195,6 @@
|
|||
[Parsing: <http://www/foo%2Ehtml> 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
|
||||
|
||||
|
|
|
@ -8,11 +8,7 @@
|
|||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.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>
|
||||
<!-- used by "platform object that supports indexed properties" tests -->
|
||||
<iframe style="display:none"></iframe>
|
||||
<script>
|
||||
test(function() {
|
||||
assert_true("Blob" in window, "window should have a Blob property.");
|
||||
|
@ -51,6 +47,10 @@ test(function() {
|
|||
"FAIL",
|
||||
new Date(),
|
||||
new RegExp(),
|
||||
{},
|
||||
{ 0: "FAIL", length: 1 },
|
||||
document.createElement("div"),
|
||||
window,
|
||||
];
|
||||
args.forEach(function(arg) {
|
||||
assert_throws(new TypeError(), function() {
|
||||
|
@ -60,18 +60,24 @@ test(function() {
|
|||
}, "Passing non-objects, Dates and RegExps for blobParts should throw a TypeError.");
|
||||
|
||||
test_blob(function() {
|
||||
return new Blob({});
|
||||
return new Blob({
|
||||
[Symbol.iterator]: Array.prototype[Symbol.iterator],
|
||||
});
|
||||
}, {
|
||||
expected: "",
|
||||
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() {
|
||||
return new Blob({ 0: "PASS", length: 1 });
|
||||
return new Blob({
|
||||
[Symbol.iterator]: Array.prototype[Symbol.iterator],
|
||||
0: "PASS",
|
||||
length: 1
|
||||
});
|
||||
}, {
|
||||
expected: "PASS",
|
||||
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() {
|
||||
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."
|
||||
});
|
||||
|
||||
var test_error = { name: "test" };
|
||||
var test_error = {
|
||||
name: "test",
|
||||
message: "test error",
|
||||
};
|
||||
|
||||
test(function() {
|
||||
var obj = {
|
||||
[Symbol.iterator]: Array.prototype[Symbol.iterator],
|
||||
get length() { throw test_error; }
|
||||
};
|
||||
assert_throws(test_error, function() {
|
||||
|
@ -99,7 +109,7 @@ test(function() {
|
|||
});
|
||||
}, "The length getter should be invoked and any exceptions should be propagated.");
|
||||
|
||||
test_blob(function() {
|
||||
test(function() {
|
||||
var element = document.createElement("div");
|
||||
element.appendChild(document.createElement("div"));
|
||||
element.appendChild(document.createElement("p"));
|
||||
|
@ -107,16 +117,15 @@ test_blob(function() {
|
|||
Object.defineProperty(list, "length", {
|
||||
get: function() { throw test_error; }
|
||||
});
|
||||
return new Blob(list);
|
||||
}, {
|
||||
expected: "[object HTMLDivElement][object HTMLParagraphElement]",
|
||||
type: "",
|
||||
desc: "A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten 'length'.)"
|
||||
});
|
||||
assert_throws(test_error, function() {
|
||||
new Blob(list);
|
||||
});
|
||||
}, "A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten 'length'.)");
|
||||
|
||||
test(function() {
|
||||
assert_throws(test_error, function() {
|
||||
var obj = {
|
||||
[Symbol.iterator]: Array.prototype[Symbol.iterator],
|
||||
length: {
|
||||
valueOf: null,
|
||||
toString: function() { throw test_error; }
|
||||
|
@ -126,6 +135,7 @@ test(function() {
|
|||
});
|
||||
assert_throws(test_error, function() {
|
||||
var obj = {
|
||||
[Symbol.iterator]: Array.prototype[Symbol.iterator],
|
||||
length: { valueOf: function() { throw test_error; } }
|
||||
};
|
||||
new Blob(obj);
|
||||
|
@ -135,6 +145,10 @@ test(function() {
|
|||
test(function() {
|
||||
var received = [];
|
||||
var obj = {
|
||||
get [Symbol.iterator]() {
|
||||
received.push("Symbol.iterator");
|
||||
return Array.prototype[Symbol.iterator];
|
||||
},
|
||||
get length() {
|
||||
received.push("length getter");
|
||||
return {
|
||||
|
@ -166,15 +180,18 @@ test(function() {
|
|||
new Blob(obj);
|
||||
});
|
||||
assert_array_equals(received, [
|
||||
"Symbol.iterator",
|
||||
"length getter",
|
||||
"length valueOf",
|
||||
"0 getter",
|
||||
"0 toString",
|
||||
"1 getter"
|
||||
"length getter",
|
||||
"length valueOf",
|
||||
"1 getter",
|
||||
]);
|
||||
}, "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() {
|
||||
assert_throws(test_error, function() {
|
||||
|
@ -201,7 +218,7 @@ test_blob(function() {
|
|||
];
|
||||
return new Blob(arr);
|
||||
}, {
|
||||
expected: "PASSundefined",
|
||||
expected: "PASS",
|
||||
type: "",
|
||||
desc: "Changes to the blobParts array should be reflected in the returned Blob (pop)."
|
||||
});
|
||||
|
@ -211,19 +228,19 @@ test_blob(function() {
|
|||
{
|
||||
toString: function() {
|
||||
if (arr.length === 3) {
|
||||
return "SS";
|
||||
return "A";
|
||||
}
|
||||
arr.unshift({
|
||||
toString: function() {
|
||||
assert_unreached("Should only access index 0 once.");
|
||||
}
|
||||
});
|
||||
return "PA";
|
||||
return "P";
|
||||
}
|
||||
},
|
||||
{
|
||||
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."
|
||||
});
|
||||
|
||||
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() {
|
||||
var select = document.createElement("select");
|
||||
select.appendChild(document.createElement("option"));
|
||||
|
|
|
@ -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();
|
|
@ -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>
|
||||
|
|
@ -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();
|
|
@ -5,4 +5,3 @@
|
|||
@zqzhang
|
||||
@yunxiaoxie
|
||||
@zhaozihao
|
||||
@foolip
|
||||
|
|
|
@ -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>
|
|
@ -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
|
||||
`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
|
||||
========
|
||||
|
||||
|
|
|
@ -9,21 +9,6 @@
|
|||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<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>
|
||||
<script src="abort-during-open.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -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()
|
|
@ -0,0 +1,3 @@
|
|||
importScripts("/resources/testharness.js");
|
||||
importScripts("abort-during-open.js");
|
||||
done();
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
@ -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)
|
|
@ -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>
|
|
@ -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>
|
|
@ -8,14 +8,6 @@
|
|||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<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>
|
||||
<script src="send-send.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
7
tests/wpt/web-platform-tests/XMLHttpRequest/send-send.js
Normal file
7
tests/wpt/web-platform-tests/XMLHttpRequest/send-send.js
Normal 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()
|
||||
})
|
|
@ -0,0 +1,3 @@
|
|||
importScripts("/resources/testharness.js");
|
||||
importScripts("send-send.js");
|
||||
done();
|
|
@ -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/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/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/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.",
|
||||
|
|
|
@ -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
|
||||
form `{name}.sub.{ext}` e.g. `example-test.sub.html` or be referenced
|
||||
through a URL containing `pipe=sub` in the query string
|
||||
e.g. `example-test.html?pipe=sub`. The substitution syntax uses {% raw %} `{{
|
||||
}}` {% endraw %} to delimit items for substitution. For example to substitute in
|
||||
e.g. `example-test.html?pipe=sub`. The substitution syntax uses `{{ }}`
|
||||
to delimit items for substitution. For example to substitute in
|
||||
the host name on which the tests are running, one would write:
|
||||
|
||||
{% raw %}
|
||||
{{host}}
|
||||
{% endraw %}
|
||||
|
||||
As well as the host, one can get full domains, including subdomains
|
||||
using the `domains` dictionary. For example:
|
||||
|
||||
{% raw %}
|
||||
{{domains[www]}}
|
||||
{% endraw %}
|
||||
|
||||
would be replaced by the fully qualified domain name of the `www`
|
||||
subdomain. Ports are also available on a per-protocol basis e.g.
|
||||
|
||||
{% raw %}
|
||||
{{ports[ws][0]}}
|
||||
{% endraw %}
|
||||
|
||||
is replaced with the first (and only) websockets port, whilst
|
||||
|
||||
{% raw %}
|
||||
{{ports[http][1]}}
|
||||
{% endraw %}
|
||||
|
||||
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
|
||||
`window.location` API. For example
|
||||
|
||||
{% raw %}
|
||||
{{location[host]}}
|
||||
{% endraw %}
|
||||
|
||||
is replaced by `hostname:port` for the current request.
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
@ayg
|
||||
@foolip
|
||||
@jdm
|
||||
@Ms2ger
|
||||
@plehegar
|
||||
|
|
|
@ -282,6 +282,7 @@ var encodingMap = {
|
|||
],
|
||||
"shift_jis": [
|
||||
"csshiftjis",
|
||||
"ms932",
|
||||
"ms_kanji",
|
||||
"shift-jis",
|
||||
"shift_jis",
|
||||
|
|
|
@ -33,11 +33,23 @@ function testAlias(arg, iface) {
|
|||
"isTrusted should be initialized to false");
|
||||
}, "createEvent('" + arg + "') should be initialized correctly.");
|
||||
}
|
||||
aliases.forEach(function(alias) {
|
||||
testAlias(alias[0], alias[1]);
|
||||
testAlias(alias[0].toLowerCase(), alias[1]);
|
||||
testAlias(alias[0].toUpperCase(), alias[1]);
|
||||
});
|
||||
for (var alias in aliases) {
|
||||
var iface = aliases[alias];
|
||||
testAlias(alias, iface);
|
||||
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() {
|
||||
assert_throws("NOT_SUPPORTED_ERR", function() {
|
||||
|
@ -61,11 +73,73 @@ This list is not exhaustive.
|
|||
*/
|
||||
var someNonCreateableEvents = [
|
||||
"AnimationEvent",
|
||||
"AnimationPlayerEvent",
|
||||
"ApplicationCacheErrorEvent",
|
||||
"AudioProcessingEvent",
|
||||
"AutocompleteErrorEvent",
|
||||
"BeforeInstallPromptEvent",
|
||||
"BeforeUnloadEvent",
|
||||
"BlobEvent",
|
||||
"ClipboardEvent",
|
||||
"CloseEvent",
|
||||
"CompositionEvent",
|
||||
"DeviceLightEvent",
|
||||
"DeviceMotionEvent",
|
||||
"DeviceOrientationEvent",
|
||||
"DragEvent",
|
||||
"ErrorEvent",
|
||||
"ExtendableEvent",
|
||||
"ExtendableMessageEvent",
|
||||
"FetchEvent",
|
||||
"FocusEvent",
|
||||
"FontFaceSetLoadEvent",
|
||||
"GamepadEvent",
|
||||
"GeofencingEvent",
|
||||
"HashChangeEvent",
|
||||
"IDBVersionChangeEvent",
|
||||
"InstallEvent",
|
||||
"KeyEvent",
|
||||
"MIDIConnectionEvent",
|
||||
"MIDIMessageEvent",
|
||||
"MediaEncryptedEvent",
|
||||
"MediaKeyEvent",
|
||||
"MediaKeyMessageEvent",
|
||||
"MediaQueryListEvent",
|
||||
"MediaStreamEvent",
|
||||
"MediaStreamTrackEvent",
|
||||
"MutationEvent",
|
||||
"NotificationEvent",
|
||||
"OfflineAudioCompletionEvent",
|
||||
"OrientationEvent",
|
||||
"PageTransitionEvent",
|
||||
"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",
|
||||
"WebGLContextEvent",
|
||||
"WebKitAnimationEvent",
|
||||
"WebKitTransitionEvent",
|
||||
"WheelEvent"
|
||||
];
|
||||
someNonCreateableEvents.forEach(function (eventInterface) {
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
var aliases = [
|
||||
["CustomEvent", "CustomEvent"],
|
||||
["Event", "Event"],
|
||||
["Events", "Event"],
|
||||
["HTMLEvents", "Event"],
|
||||
["KeyboardEvent", "KeyboardEvent"],
|
||||
["KeyEvents", "KeyboardEvent"],
|
||||
["MessageEvent", "MessageEvent"],
|
||||
["MouseEvent", "MouseEvent"],
|
||||
["MouseEvents", "MouseEvent"],
|
||||
["TouchEvent", "TouchEvent"],
|
||||
["UIEvent", "UIEvent"],
|
||||
["UIEvents", "UIEvent"]
|
||||
];
|
||||
var aliases = {
|
||||
"CustomEvent": "CustomEvent",
|
||||
"Event": "Event",
|
||||
"Events": "Event",
|
||||
"HTMLEvents": "Event",
|
||||
"KeyboardEvent": "KeyboardEvent",
|
||||
"MessageEvent": "MessageEvent",
|
||||
"MouseEvent": "MouseEvent",
|
||||
"MouseEvents": "MouseEvent",
|
||||
"TouchEvent": "TouchEvent",
|
||||
"UIEvent": "UIEvent",
|
||||
"UIEvents": "UIEvent"
|
||||
};
|
||||
|
|
|
@ -6,6 +6,7 @@ function attr_is(attr, v, ln, ns, p, n) {
|
|||
assert_equals(attr.namespaceURI, ns)
|
||||
assert_equals(attr.prefix, p)
|
||||
assert_equals(attr.name, n)
|
||||
assert_equals(attr.nodeName, n);
|
||||
assert_equals(attr.specified, true)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
@foolip
|
||||
@inexorabletash
|
||||
@sideshowbarker
|
||||
|
|
|
@ -419,6 +419,7 @@ var encodings_table =
|
|||
{
|
||||
"labels": [
|
||||
"csshiftjis",
|
||||
"ms932",
|
||||
"ms_kanji",
|
||||
"shift-jis",
|
||||
"shift_jis",
|
||||
|
|
|
@ -11,8 +11,6 @@ function streamBody(reader, test, count) {
|
|||
} else {
|
||||
test.step(function() {
|
||||
assert_true(count >= 2, "Retrieve body progressively");
|
||||
test.done();
|
||||
return;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -20,16 +18,14 @@ function streamBody(reader, test, count) {
|
|||
|
||||
//simulate streaming:
|
||||
//count is large enough to let the UA deliver the body before it is completely retrieved
|
||||
async_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "trickle.py?ms=30&count=100").then(function(resp) {
|
||||
promise_test(function(test) {
|
||||
return fetch(RESOURCES_DIR + "trickle.py?ms=30&count=100").then(function(resp) {
|
||||
var count = 0;
|
||||
if (resp.body)
|
||||
return streamBody(resp.body.getReader(), test, count);
|
||||
else
|
||||
test.step(function() {
|
||||
assert_unreached( "Body does not exist in response");
|
||||
test.done();
|
||||
return;
|
||||
});
|
||||
});
|
||||
}, "Stream response's body");
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
var parameters = [null, 1];
|
||||
parameters.forEach(function(parameter) {
|
||||
test(function() {
|
||||
assert_throws(new TypeError(), () => new Headers(parameter));
|
||||
assert_throws(new TypeError(), function() { new Headers(parameter) });
|
||||
}, "Create headers with " + parameter + " should throw");
|
||||
});
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -8,6 +8,7 @@
|
|||
<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>
|
||||
<script src="../resources/utils.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<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) {
|
||||
return request.arrayBuffer().then( function(bodyAsArrayBuffer) {
|
||||
assert_array_equals(bodyAsArrayBuffer, str2ab(expectedBody), "Retrieve and verify request's body");
|
||||
return request.arrayBuffer().then(function(bodyAsArrayBuffer) {
|
||||
validateBufferFromString(bodyAsArrayBuffer, expectedBody, "Retrieve and verify request's body");
|
||||
assert_true(request.bodyUsed, "body as arrayBuffer: bodyUsed turned true");
|
||||
});
|
||||
}
|
||||
|
@ -79,12 +70,28 @@
|
|||
|
||||
var formData = new FormData();
|
||||
formData.append("name", "value")
|
||||
checkRequestBody("This is request's body", "text", checkBodyText);
|
||||
checkRequestBody("This is request's body", "blob", checkBodyBlob);
|
||||
checkRequestBody("This is request's body", "arrayBuffer", checkBodyArrayBuffer);
|
||||
checkRequestBody(JSON.stringify("This is request's body"), "json", checkBodyJSON);
|
||||
var textData = JSON.stringify("This is response's body");
|
||||
var blob = new Blob([textData], { "type" : "text/plain" });
|
||||
|
||||
checkRequestBody(textData, "text", checkBodyText);
|
||||
checkRequestBody(textData, "blob", checkBodyBlob);
|
||||
checkRequestBody(textData, "arrayBuffer", checkBodyArrayBuffer);
|
||||
checkRequestBody(textData, "json", checkBodyJSON);
|
||||
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\""];
|
||||
goodJSONValues.forEach(function(value) {
|
||||
promise_test(function(test) {
|
||||
|
|
|
@ -23,18 +23,23 @@
|
|||
}
|
||||
}, "Initialize Request with headers values");
|
||||
|
||||
function makeRequestInit(body, method) {
|
||||
return {"method": method, "body": body};
|
||||
}
|
||||
|
||||
function checkRequestInit(body, bodyType, expectedTextBody) {
|
||||
promise_test(function(test) {
|
||||
var request = new Request("", {"method": "POST", "body": body});
|
||||
assert_throws(new TypeError(),
|
||||
function() { new Request("", {"method": "GET", "body": body}); }
|
||||
);
|
||||
assert_throws(new TypeError(),
|
||||
function() { new Request("", {"method": "HEAD", "body": body}); }
|
||||
);
|
||||
var request = new Request("", makeRequestInit(body, "POST"));
|
||||
if (body) {
|
||||
assert_throws(new TypeError(),
|
||||
function() { new Request("", makeRequestInit(body, "GET")); }
|
||||
);
|
||||
} else {
|
||||
new Request("", makeRequestInit(body, "GET")); // should not throw
|
||||
}
|
||||
var reqHeaders = request.headers;
|
||||
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) {
|
||||
//not equals: cannot guess formData exact value
|
||||
assert_true( bodyAsText.search(expectedTextBody) > -1, "Retrieve and verify request body");
|
||||
|
@ -47,6 +52,8 @@
|
|||
formaData.append("name", "value");
|
||||
var usvString = "This is a USVString"
|
||||
|
||||
checkRequestInit(undefined, undefined, "");
|
||||
checkRequestInit(null, null, "");
|
||||
checkRequestInit(blob, "application/octet-binary", "This is a blob");
|
||||
checkRequestInit(formaData, "multipart/form-data", "name=\"name\"\r\n\r\nvalue");
|
||||
checkRequestInit(usvString, "text/plain;charset=UTF-8", "This is a USVString");
|
||||
|
|
|
@ -44,25 +44,31 @@ function checkRequest(request, ExpectedValuesDict) {
|
|||
}
|
||||
}
|
||||
|
||||
//check reader's text content in an asyncronous test
|
||||
function readTextStream(reader, asyncTest, expectedValue, retrievedText) {
|
||||
if (!retrievedText)
|
||||
retrievedText = "";
|
||||
reader.read().then(function(data) {
|
||||
function stringToArray(str) {
|
||||
var array = new Uint8Array(str.length);
|
||||
for (var i=0, strLen = str.length; i < strLen; i++)
|
||||
array[i] = str.charCodeAt(i);
|
||||
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) {
|
||||
var decoder = new TextDecoder();
|
||||
retrievedText += decoder.decode(data.value);
|
||||
readTextStream(reader, asyncTest, expectedValue, retrievedText);
|
||||
return;
|
||||
var newBuffer;
|
||||
if (retrievedArrayBuffer) {
|
||||
newBuffer = new ArrayBuffer(data.value.length + retrievedArrayBuffer.length);
|
||||
newBuffer.set(retrievedArrayBuffer, 0);
|
||||
newBuffer.set(data.value, retrievedArrayBuffer.length);
|
||||
} else {
|
||||
newBuffer = data.value;
|
||||
}
|
||||
return validateStreamFromString(reader, expectedValue, newBuffer);
|
||||
}
|
||||
asyncTest.step(function() {
|
||||
assert_equals(retrievedText, expectedValue, "Retrieve and verify stream");
|
||||
asyncTest.done();
|
||||
});
|
||||
}).catch(function(e) {
|
||||
asyncTest.step(function() {
|
||||
assert_unreached("Cannot read stream " + e);
|
||||
asyncTest.done();
|
||||
});
|
||||
validateBufferFromString(retrievedArrayBuffer, expectedValue, "Retrieve and verify stream");
|
||||
});
|
||||
}
|
||||
|
|
|
@ -45,12 +45,12 @@
|
|||
"Expect response.headers has name:value header");
|
||||
}, "Check Response's clone has the expected attribute values");
|
||||
|
||||
async_test(function(test) {
|
||||
readTextStream(response.body.getReader(), test, body);
|
||||
promise_test(function(test) {
|
||||
return validateStreamFromString(response.body.getReader(), body);
|
||||
}, "Check orginal response's body after cloning");
|
||||
|
||||
async_test(function(test) {
|
||||
readTextStream(clonedResponse.body.getReader(), test, body);
|
||||
promise_test(function(test) {
|
||||
return validateStreamFromString(clonedResponse.body.getReader(), body);
|
||||
}, "Check cloned response's body");
|
||||
|
||||
promise_test(function(test) {
|
||||
|
@ -63,4 +63,4 @@
|
|||
}, "Cannot clone a disturbed response");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -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>
|
|
@ -8,6 +8,7 @@
|
|||
<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>
|
||||
<script src="../resources/utils.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
|
@ -39,16 +40,14 @@
|
|||
|
||||
function checkBodyArrayBuffer(response, expectedBody) {
|
||||
return response.arrayBuffer().then( function(bodyAsArrayBuffer) {
|
||||
var decoder = new TextDecoder("utf-8");
|
||||
var strBody = decoder.decode(bodyAsArrayBuffer);
|
||||
assert_equals(strBody, expectedBody, "Retrieve and verify response's body");
|
||||
validateBufferFromString(bodyAsArrayBuffer, expectedBody, "Retrieve and verify response's body");
|
||||
assert_true(response.bodyUsed, "body as arrayBuffer: bodyUsed turned true");
|
||||
});
|
||||
}
|
||||
|
||||
function checkBodyJson(response, expectedBody) {
|
||||
return response.json().then(function(bodyAsJson) {
|
||||
var strBody = JSON.stringify(bodyAsJson)
|
||||
function checkBodyJSON(response, expectedBody) {
|
||||
return response.json().then(function(bodyAsJSON) {
|
||||
var strBody = JSON.stringify(bodyAsJSON)
|
||||
assert_equals(strBody, expectedBody, "Retrieve and verify response's body");
|
||||
assert_true(response.bodyUsed, "body as json: bodyUsed turned true");
|
||||
});
|
||||
|
@ -70,12 +69,29 @@
|
|||
}
|
||||
|
||||
var formData = new FormData();
|
||||
formData.append("name", "value")
|
||||
checkResponseBody("This is response's body", "text", checkBodyText);
|
||||
checkResponseBody("This is response's body", "blob", checkBodyBlob);
|
||||
checkResponseBody("This is response's body", "arrayBuffer", checkBodyArrayBuffer);
|
||||
checkResponseBody(JSON.stringify("This is response's body"), "json", checkBodyJson);
|
||||
formData.append("name", "value");
|
||||
var textData = JSON.stringify("This is response's body");
|
||||
var blob = new Blob([textData], { "type" : "text/plain" });
|
||||
|
||||
checkResponseBody(textData, "text", checkBodyText);
|
||||
checkResponseBody(textData, "blob", checkBodyBlob);
|
||||
checkResponseBody(textData, "arrayBuffer", checkBodyArrayBuffer);
|
||||
checkResponseBody(textData, "json", checkBodyJSON);
|
||||
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>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -52,10 +52,10 @@
|
|||
checkResponseInit(urlSearchParams, "application/x-www-form-urlencoded;charset=UTF-8", "name=value");
|
||||
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 response = new Response(body);
|
||||
readTextStream(response.body.getReader(), test, body);
|
||||
return validateStreamFromString(response.body.getReader(), body);
|
||||
}, "Read Response's body as readableStream");
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
@plehegar
|
||||
@foolip
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
@foolip
|
||||
@haoxli
|
||||
@zqzhang
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
@Ms2ger
|
||||
@foolip
|
||||
@gsnedders
|
||||
@jdm
|
||||
@jgraham
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
test(function () {
|
||||
var href = location.href;
|
||||
location.assign("http://:");
|
||||
assert_throws('SYNTAX_ERR', function() { location.assign("http://:"); });
|
||||
assert_equals(location.href, href);
|
||||
}, "URL that fails to parse");
|
||||
</script>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -24,21 +24,21 @@ var testElements = [
|
|||
},
|
||||
{
|
||||
tag: "input",
|
||||
types: ["datetime"],
|
||||
types: ["datetime-local"],
|
||||
testData: [
|
||||
{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: "abc"}, expected: true, name: "[target] The value attribute cannot convert to a valid normalized forced-UTC global 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: false, name: "[target] The value attribute cannot convert to a valid normalized forced-UTC global date and time string"}
|
||||
]
|
||||
},
|
||||
{
|
||||
tag: "input",
|
||||
types: ["color"],
|
||||
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: "#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"}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -32,8 +32,11 @@ test(function() {
|
|||
|
||||
assert_equals(template.ownerDocument, doc.body.ownerDocument,
|
||||
'Wrong template node owner document');
|
||||
assert_equals(template.content.ownerDocument, doc,
|
||||
'Wrong template content owner document');
|
||||
var ownerDoc = template.content.ownerDocument;
|
||||
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 '
|
||||
+ 'to which it will be appended. Test empty template');
|
||||
|
|
|
@ -22,6 +22,13 @@ function templateIsAChild(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) {
|
||||
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');
|
||||
}
|
||||
|
||||
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) {
|
||||
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 is created by innerHTML',
|
||||
doc.head],
|
||||
['Template element as a descendant of the FRAMESET element. ' +
|
||||
'Template element is created by innerHTML',
|
||||
frameset]
|
||||
];
|
||||
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. ' +
|
||||
|
@ -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 is created by innerHTML',
|
||||
doc.head],
|
||||
['Template element as an indirect descendant of the FRAMESET element. ' +
|
||||
'Template element is created by innerHTML',
|
||||
frameset]
|
||||
];
|
||||
generate_tests(templateIsAnIndirectChild, parameters,
|
||||
'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. ' +
|
||||
|
|
|
@ -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>
|
|
@ -11,7 +11,6 @@
|
|||
<button id=button1 type=submit>button1</button>
|
||||
<input id=input1>
|
||||
<input id=input2 disabled>
|
||||
<input id=input3 autofocus>
|
||||
<textarea id=textarea1>textarea1</textarea>
|
||||
<input type=checkbox id=checkbox1 checked>
|
||||
<input type=radio id=radio1 checked>
|
||||
|
@ -20,8 +19,6 @@
|
|||
<iframe src="focus-iframe.html" id=iframe onload="load()"></iframe>
|
||||
|
||||
<script>
|
||||
testSelector(":focus", ["input3"], "input3 has the attribute autofocus");
|
||||
|
||||
document.getElementById("input1").focus(); // set the focus on input1
|
||||
testSelector(":focus", ["input1"], "input1 has the focus");
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
<head>
|
||||
<title>HTML Templates: additions to 'in frameset' insertion mode</title>
|
||||
<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">
|
||||
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#in-head-addition">
|
||||
<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="https://www.w3.org/TR/2015/WD-html51-20151008/syntax.html#parsing-main-inframeset">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.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 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');
|
||||
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');
|
||||
}, '<template> tag should be ignored in "in frameset" insertion mode');
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -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 () {
|
||||
var doc = newHTMLDocument();
|
||||
doc.body.innerHTML = '<template id="tmpl1">'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
@bit
|
||||
@acolwell
|
||||
@foolip
|
||||
@shishimaru
|
||||
@sideshowbarker
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
@dontcallmedom
|
||||
@alvestrand
|
||||
|
||||
@dontcallmedom
|
||||
@foolip
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<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="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrackList-add-void-MediaStreamTrack-track">
|
||||
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStreamTrack-stop-void">
|
||||
<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStream-addTrack-void-MediaStreamTrack-track">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-stop-void">
|
||||
</head>
|
||||
<body>
|
||||
<p class="instructions">When prompted, accept to share your audio stream, then
|
||||
your video stream.</p>
|
||||
<h1 class="instructions">Description</h1>
|
||||
<p class="instructions">This test checks that adding a track to a finished
|
||||
MediaStream raises an INVALID_STATE_ERR exception.</p>
|
||||
<p class="instructions">This test checks that adding a track to an inactive
|
||||
MediaStream is allowed.</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 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 () {
|
||||
var audio, video;
|
||||
|
||||
|
@ -33,13 +32,10 @@ t.step(function () {
|
|||
video = stream;
|
||||
t.step(function () {
|
||||
audio.getAudioTracks()[0].stop();
|
||||
assert_true(audio.ended, "Audio stream is ended after stopping its only audio track");
|
||||
assert_throws("INVALID_STATE_ERR", function () {
|
||||
video.addTrack(audio.getAudioTracks()[0]);
|
||||
}, "Adding a track from a finished stream raises an INVALID_STATE_ERR exception");
|
||||
assert_throws("INVALID_STATE_ERR", function () {
|
||||
audio.removeTrack(audio.getAudioTracks()[0]);
|
||||
}, "Removing a track from a finished stream raises an INVALID_STATE_ERR exception");
|
||||
assert_false(audio.active, "audio stream is inactive after stopping its only audio track");
|
||||
assert_true(video.active, "video stream is active");
|
||||
audio.addTrack(video.getVideoTracks()[0]);
|
||||
audio.removeTrack(audio.getAudioTracks()[0]);
|
||||
});
|
||||
t.done();
|
||||
}
|
||||
|
|
|
@ -3,13 +3,12 @@
|
|||
<head>
|
||||
<title>MediaStream constructor algorithm</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#idl-def-MediaStream">
|
||||
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStream-id">
|
||||
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastream">
|
||||
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastream-ended">
|
||||
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/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='stylesheet' href='/resources/testharness.css' media='all'/>
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-MediaStream">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStream-id">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediastream">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#event-mediastreamtrack-ended">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-stop-void">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-clone-MediaStreamTrack">
|
||||
</head>
|
||||
<body>
|
||||
<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(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]);
|
||||
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();
|
||||
}), false);
|
||||
audioTrack2.stop();
|
||||
|
|
|
@ -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>
|
|
@ -3,8 +3,7 @@
|
|||
<head>
|
||||
<title>Test that mediastreamtrack are properly ended</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#mediastreamtrack">
|
||||
<link rel='stylesheet' href='/resources/testharness.css' media='all'/>
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediastreamtrack">
|
||||
</head>
|
||||
<body>
|
||||
<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>
|
||||
<p class="instructions">This test checks that the video and audio tracks of
|
||||
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>
|
||||
<script src=/resources/testharness.js></script>
|
||||
|
@ -29,7 +28,7 @@ t.step(function () {
|
|||
vidTrack.onended = t.step_func(function () {
|
||||
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_true(stream.ended, "MediaStream has been ended as expected");
|
||||
assert_false(stream.active, "MediaStream has been inactive as expected");
|
||||
t.done();
|
||||
});
|
||||
}), function (error) {}
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
@plehegar
|
||||
@foolip
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -44,4 +44,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -44,4 +44,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -49,4 +49,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -41,4 +41,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -53,4 +53,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -47,4 +47,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -41,4 +41,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -45,4 +45,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -40,4 +40,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -37,4 +37,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Forms</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
|
@ -37,4 +37,4 @@
|
|||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue