[SOUP] Switch to use libsoup WebSockets API
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Aug 2019 11:46:07 +0000 (11:46 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Aug 2019 11:46:07 +0000 (11:46 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200162

Reviewed by Michael Catanzaro.

Source/WebCore:

Use the libsoup WebSockets API unconditionally for libsoup based ports.

* Modules/websockets/ThreadableWebSocketChannel.cpp:
(WebCore::ThreadableWebSocketChannel::create): Do not check the env var anymore.
* platform/SourcesSoup.txt:
* platform/network/SocketStreamHandleImpl.cpp:
* platform/network/StorageSessionProvider.h:
* platform/network/soup/SocketStreamHandleImpl.h:
* platform/network/soup/SocketStreamHandleImplSoup.cpp: Removed.

Source/WebKit:

Remove temporary method added for old WebSockets implementation.

* NetworkProcess/NetworkStorageSessionProvider.h:

Tools:

Update libsoup version to 2.67.90.

* gtk/jhbuild.modules:
* wpe/jhbuild.modules:

LayoutTests:

* platform/gtk/TestExpectations:
* platform/gtk/http/tests/websocket/tests/hybi/broken-utf8-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/close-before-open-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/close-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-error-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/long-control-frame-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/reserved-bits-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/simple-wss-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/too-long-payload-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt: Added.
* platform/gtk/http/tests/websocket/tests/hybi/workers/close-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt: Removed.
* platform/gtk/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-illegal-expected.txt: Removed.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/websockets/security/001-expected.txt: Added.
* platform/gtk/js/intl-datetimeformat-expected.txt: Removed.
* platform/wpe/TestExpectations:
* platform/wpe/http/tests/websocket/tests/hybi/broken-utf8-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/close-before-open-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/close-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-error-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/long-control-frame-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/reserved-bits-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/simple-wss-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/too-long-payload-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt: Added.
* platform/wpe/http/tests/websocket/tests/hybi/workers/close-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/websockets/security/001-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248099 268f45cc-cd09-0410-ab3c-d52691b4dbfc

166 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/gtk/TestExpectations
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/broken-utf8-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-before-open-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-error-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/long-control-frame-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/reserved-bits-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/simple-wss-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/too-long-payload-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/workers/close-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt [deleted file]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-illegal-expected.txt [deleted file]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/security/001-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/js/intl-datetimeformat-expected.txt [deleted file]
LayoutTests/platform/wpe/TestExpectations
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/broken-utf8-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-before-open-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-error-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/long-control-frame-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/reserved-bits-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/simple-wss-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/too-long-payload-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/workers/close-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/security/001-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp
Source/WebCore/platform/SourcesSoup.txt
Source/WebCore/platform/network/SocketStreamHandleImpl.cpp
Source/WebCore/platform/network/StorageSessionProvider.h
Source/WebCore/platform/network/soup/SocketStreamHandleImpl.h
Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp [deleted file]
Source/WebKit/ChangeLog
Source/WebKit/NetworkProcess/NetworkStorageSessionProvider.h
Tools/ChangeLog
Tools/gtk/jhbuild.modules
Tools/wpe/jhbuild.modules

index aab27b3..e04a7ea 100644 (file)
@@ -1,3 +1,164 @@
+2019-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [SOUP] Switch to use libsoup WebSockets API
+        https://bugs.webkit.org/show_bug.cgi?id=200162
+
+        Reviewed by Michael Catanzaro.
+
+        * platform/gtk/TestExpectations:
+        * platform/gtk/http/tests/websocket/tests/hybi/broken-utf8-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/close-before-open-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/close-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-error-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/long-control-frame-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/reserved-bits-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/simple-wss-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/too-long-payload-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt: Added.
+        * platform/gtk/http/tests/websocket/tests/hybi/workers/close-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt: Removed.
+        * platform/gtk/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-illegal-expected.txt: Removed.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/websockets/security/001-expected.txt: Added.
+        * platform/gtk/js/intl-datetimeformat-expected.txt: Removed.
+        * platform/wpe/TestExpectations:
+        * platform/wpe/http/tests/websocket/tests/hybi/broken-utf8-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/close-before-open-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/close-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-error-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/long-control-frame-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/reserved-bits-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/simple-wss-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/too-long-payload-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt: Added.
+        * platform/wpe/http/tests/websocket/tests/hybi/workers/close-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/websockets/security/001-expected.txt: Added.
+
 2019-07-31  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: Debugger: support emulateUserGesture parameter in Debugger.evaluateOnCallFrame
index c1dd954..772f4d6 100644 (file)
@@ -1172,6 +1172,20 @@ swipe/pushState-programmatic-back-while-swiping-crash.html [ Skip ]
 fast/forms/datalist/input-appearance-range-with-datalist-rtl.html [ Skip ]
 fast/forms/datalist/update-range-with-datalist.html [ Skip ]
 
+# Inspector tests don't work with platform WebSockets API
+webkit.org/b/200162 http/tests/websocket/tests/hybi/inspector/ [ Skip ]
+
+# Extensions not supported with platform WebSockets API
+webkit.org/b/199943 http/tests/websocket/tests/hybi/extensions.html [ Failure ]
+webkit.org/b/199943 http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html [ Failure ]
+webkit.org/b/199943 http/tests/websocket/tests/hybi/deflate-frame-parameter.html [ Failure ]
+
+# Server cookie not handled with platform WebSockets API
+webkit.org/b/200165 imported/w3c/web-platform-tests/websockets/cookies/002.html [ Failure ]
+webkit.org/b/200165 imported/w3c/web-platform-tests/websockets/cookies/007.html [ Failure ]
+
+webkit.org/b/200338 http/tests/websocket/tests/hybi/client-close.html [ Failure ]
+
 #////////////////////////////////////////////////////////////////////////////////////////
 # End of Expected failures.
 #
@@ -3807,8 +3821,6 @@ webkit.org/b/199440 fast/mediastream/getUserMedia-video-rescaling.html [ Failure
 
 webkit.org/b/199437 compositing/geometry/limit-layer-bounds-clipping-ancestor.html [ Failure ]
 
-webkit.org/b/199441 http/tests/websocket/tests/hybi/deflate-frame-parameter.html [ Failure ]
-
 webkit.org/b/199872 http/tests/inspector/network/resource-sizes-network.html [ Failure ]
 
 webkit.org/b/199873 imported/w3c/web-platform-tests/service-workers/service-worker/ready.https.html [ Failure ]
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/broken-utf8-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/broken-utf8-expected.txt
new file mode 100644 (file)
index 0000000..2dbf4f8
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether WebSocket aborts the connection when it receives a text frame containing broken UTF-8 data.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-before-open-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-before-open-expected.txt
new file mode 100644 (file)
index 0000000..597239b
--- /dev/null
@@ -0,0 +1,10 @@
+Test if Web Socket fires close event when WebSocket is opened and closed fore open event is received.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+closed on test 1
+closed on test 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt
new file mode 100644 (file)
index 0000000..862e876
--- /dev/null
@@ -0,0 +1,82 @@
+Test CloseEvent code and reason property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+ws.onclose() was called.
+PASS closeEvent.wasClean is false
+PASS closeEvent.code is codeAbnormalClosure
+FAIL closeEvent.reason should be . Was WebSocket is closed before the connection is established..
+WebSocketTest.onopen() was called with testId = 0.
+WebSocketTest.onclose() was called with testId = 0.
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 1005
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 1005
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 1.
+WebSocketTest.onclose() was called with testId = 1.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 2.
+WebSocketTest.onclose() was called with testId = 2.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is 1000
+PASS closeEvent.reason is 'ok'
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is 1000
+PASS closeEvent.reason is 'ok'
+WebSocketTest.onopen() was called with testId = 3.
+WebSocketTest.onclose() was called with testId = 3.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 1005.
+FAIL closeEvent.reason should be . Was foo.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 1005.
+FAIL closeEvent.reason should be . Was foo.
+WebSocketTest.onopen() was called with testId = 4.
+WebSocketTest.onclose() was called with testId = 4.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 5.
+WebSocketTest.onclose() was called with testId = 5.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 6.
+WebSocketTest.onclose() was called with testId = 6.
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 65535
+PASS closeEvent.reason is 'good bye'
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 65535
+PASS closeEvent.reason is 'good bye'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/close-expected.txt
new file mode 100644 (file)
index 0000000..56694e4
--- /dev/null
@@ -0,0 +1,110 @@
+CONSOLE MESSAGE: line 138: WebSocket close message is too long.
+CONSOLE MESSAGE: line 138: WebSocket close message is too long.
+Verify WebSocket::close behaviors.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Invalid code test: 0
+Code 999 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 1
+Code 1001 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 2
+Code 2999 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 3
+Code 5000 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 4
+Code 66536 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 5
+Code 4294968296 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 6
+Code 2999.9 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 7
+Code NaN must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 8
+Code 0 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 9
+Code 100 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 10
+Code Infinity must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 11
+Code -Infinity must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 12
+Code NaN must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+PASS onerror was called.
+runCodeTest: onclose().
+PASS closeEvent.code is abnormalClosure
+Skip invalid string test.
+Reason test: 0
+  with invalid reason: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+Reason 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 must cause SyntaxError.
+PASS result is false
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is syntaxErr
+Reason test: 1
+  with invalid reason: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012©
+Reason 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012© must cause SyntaxError.
+PASS result is false
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is syntaxErr
+Reason test: 2
+PASS onerror was called.
+runReasonTest: onclose().
+PASS closeEvent.code is abnormalClosure
+Code and reason test: 0
+Code and reason must be
+  code  : 1000
+  reason: OK, Bye!
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+Code and reason test: 1
+Code and reason must be
+  code  : 3000
+  reason: 3000
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+Code and reason test: 2
+Code and reason must be
+  code  : 4000
+  reason: code is 4000
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+Code and reason test: 3
+Code and reason must be
+  code  : 4999
+  reason: © Google
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt
new file mode 100644 (file)
index 0000000..25ce5ab
--- /dev/null
@@ -0,0 +1,20 @@
+Test that an open WebSocket does not prevent a page from entering page cache.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+pageshow - not from cache
+pagehide - entering cache
+pageshow - from cache
+PASS Page did enter and was restored from the page cache
+PASS error event fired
+PASS wasRestoredFromPageCache is true
+PASS close event fired
+PASS wasRestoredFromPageCache is true
+PASS receivedErrorEvent is true
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt
new file mode 100644 (file)
index 0000000..cb3ca8b
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether a compressed control frame is rejected
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt
new file mode 100644 (file)
index 0000000..a81c036
--- /dev/null
@@ -0,0 +1,10 @@
+Test that readyState is CLOSED within onerror event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onerror() was called.
+PASS ws.readyState is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt
new file mode 100644 (file)
index 0000000..1c090b2
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket rejects a fragmented control frame and aborts the connection.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-error-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-error-expected.txt
new file mode 100644 (file)
index 0000000..2abf016
--- /dev/null
@@ -0,0 +1,10 @@
+Handshake error test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Closed.
+PASS ws.readyState is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt
new file mode 100644 (file)
index 0000000..264eb0b
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends Sec-WebSocket-Extensions header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt
new file mode 100644 (file)
index 0000000..2159405
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends status line with invalid http version.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt
new file mode 100644 (file)
index 0000000..2ec7ce9
--- /dev/null
@@ -0,0 +1,11 @@
+Connection should fail immediately, rather than succeeding or staying in limbo until timeout, if handshake is longer than 1024 bytes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS timedOut is false
+PASS connected is false
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt
new file mode 100644 (file)
index 0000000..28f70ae
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether WebSocket handshake fails if the server sends mismatched Sec-WebSocket-Protocol header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS closeEvent.wasClean is false
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt
new file mode 100644 (file)
index 0000000..2bfdb47
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if there are more one Sec-WebSocket-Accept header field in the response.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt
new file mode 100644 (file)
index 0000000..a287361
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if there are more than one Sec-WebSocket-Extensions header field in the response..
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt
new file mode 100644 (file)
index 0000000..f5f0809
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if there are more than one Sec-WebSocket-Protocol header field in the response.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt
new file mode 100644 (file)
index 0000000..4b4bcd3
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server does not send Sec-WebSocket-Accept header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt
new file mode 100644 (file)
index 0000000..bfabd83
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if Connection header field isn't reflected by the server.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt
new file mode 100644 (file)
index 0000000..f6694de
--- /dev/null
@@ -0,0 +1,12 @@
+Handshake should fail when the first line does not end with CRLF.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Connected
+Timed out (state = 1)
+FAIL connected should be false. Was true.
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt
new file mode 100644 (file)
index 0000000..386539f
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if Upgrade header field isn't reflected by the server.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt
new file mode 100644 (file)
index 0000000..17273c7
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends header with non-ascii characters in name.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt
new file mode 100644 (file)
index 0000000..146cc86
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends a WebSocket extensions header with non-ascii characters in its value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt
new file mode 100644 (file)
index 0000000..ec69fd3
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends a WebSocket protocol header with non-ascii characters in its value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt
new file mode 100644 (file)
index 0000000..1e49c92
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends status line with non-ascii characters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt
new file mode 100644 (file)
index 0000000..b659a81
--- /dev/null
@@ -0,0 +1,11 @@
+Connection should fail immediately, rather than succeeding or staying in limbo until timeout, if a null byte is received in the status header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS timedOut is false
+PASS connected is false
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt
new file mode 100644 (file)
index 0000000..b91be35
--- /dev/null
@@ -0,0 +1,11 @@
+Connection should fail immediately, rather than succeeding or staying in limbo until timeout, if a null byte is received before the handshake.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS timedOut is false
+PASS connected is false
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt
new file mode 100644 (file)
index 0000000..8719188
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends incorrect Sec-WebSocket-Accept header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt
new file mode 100644 (file)
index 0000000..da3137f
--- /dev/null
@@ -0,0 +1,11 @@
+Test http version parsing and validation. HTTP version 1.1 and above should be accepted for WebSockets.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+FAIL The following URL should have been allowed to be opened: ws://localhost:8880/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1?1.11
+FAIL The following URL should have been allowed to be opened: ws://localhost:8880/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1?11.0
+FAIL At least one test failed.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt
new file mode 100644 (file)
index 0000000..e88d094
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket rejects interleaved fragmented frames.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt
new file mode 100644 (file)
index 0000000..f620c60
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether WebSocket aborts the connection when it receives an unexpected continuation frame without any leading text or binary frame.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt
new file mode 100644 (file)
index 0000000..6b7081f
--- /dev/null
@@ -0,0 +1,24 @@
+Test whether WebSocket aborts the connection when it receives an unexpected encoding length frame.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Case 126_125: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case 126_0: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case 127_65535: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case 127_0: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt
new file mode 100644 (file)
index 0000000..895e69b
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket aborts the connection when it receives an masked frames from server.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/long-control-frame-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/long-control-frame-expected.txt
new file mode 100644 (file)
index 0000000..e6364a7
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket rejects control frames longer than 125 bytes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt
new file mode 100644 (file)
index 0000000..6bbdc7c
--- /dev/null
@@ -0,0 +1,9 @@
+Make sure WebSocket gives errors on long invalid upgrade header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+WebSocket is closed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt
new file mode 100644 (file)
index 0000000..5e582b4
--- /dev/null
@@ -0,0 +1,4 @@
+ALERT: Created a socket to 'ws://127.0.0.1:8880/websocket/tests/hybi/slow-reply'; readyState 0.
+ALERT: Terminating network process.
+ALERT: Received error:[object Event]
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/reserved-bits-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/reserved-bits-expected.txt
new file mode 100644 (file)
index 0000000..c6432a3
--- /dev/null
@@ -0,0 +1,28 @@
+Test whether WebSocket rejects frames whose reserved bit is on.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Case compressed=false&bitNumber=1: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=false&bitNumber=2: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=false&bitNumber=3: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=true&bitNumber=2: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=true&bitNumber=3: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt
new file mode 100644 (file)
index 0000000..4ef26d1
--- /dev/null
@@ -0,0 +1,48 @@
+Tests whether WebSocket ignores frames with reserved opcode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Opcode 3: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 4: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 5: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 6: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 7: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 11: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 12: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 13: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 14: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 15: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt
new file mode 100644 (file)
index 0000000..272f364
--- /dev/null
@@ -0,0 +1,15 @@
+Test WebSocket sends Secure cookies over secure connections.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Note: mod_pywebsocket does not send secure cookies ('see FIXMEs in mod_pywebsocket code'), so this test is expected to FAIL to return WK-websocket-test-secure=1 until that bug is fixed.
+
+See pywebsocket Bug 150 for details.
+
+WebSocket open
+WebSocket closed
+FAIL cookie should be WK-websocket-test-secure=1; WK-websocket-test=1. Was WK-websocket-test=1.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt
new file mode 100644 (file)
index 0000000..46ce95d
--- /dev/null
@@ -0,0 +1,10 @@
+WebSocket: Object's toString method should be called only once.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS testObj.callCounter is 1
+FAIL closeEvent.wasClean should be true. Was false.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/simple-wss-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/simple-wss-expected.txt
new file mode 100644 (file)
index 0000000..be511b2
--- /dev/null
@@ -0,0 +1,12 @@
+Simple secure Web Socket test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Created a socket to 'wss://127.0.0.1:9323/websocket/tests/hybi/simple'; readyState 0.
+Connected; readyState 1
+Received: 'Hello from Simple WSH.'; readyState 1
+Timed out in state: 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt
new file mode 100644 (file)
index 0000000..5067f75
--- /dev/null
@@ -0,0 +1,15 @@
+Tests that WebSocket correctly handles being stopped in the error event handler upon restoring from PageCache.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+pageshow - not from cache
+pagehide - entering cache
+pageshow - from cache
+PASS Page did enter and was restored from the page cache
+error event fired
+PASS wasRestoredFromPageCache is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/too-long-payload-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/too-long-payload-expected.txt
new file mode 100644 (file)
index 0000000..3b7139e
--- /dev/null
@@ -0,0 +1,11 @@
+Tests whether WebSocket correctly aborts the connection when it receives a frame with too long payload.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt
new file mode 100644 (file)
index 0000000..93b212b
--- /dev/null
@@ -0,0 +1,19 @@
+Tests WebSocket Set-Cookie behavior for third-parties with existing cookies.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS document.location.host is "127.0.0.1:8000"
+
+Setting third-party cookie 'foo' through cross-origin WebSocket handshake.
+
+Opening localhost third-party iframe to check its cookies.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+--------
+Frame: '<!--frame1-->'
+--------
+Cookies are: setAsFirstParty = value
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt
new file mode 100644 (file)
index 0000000..9b1ed0a
--- /dev/null
@@ -0,0 +1,18 @@
+Tests WebSocket Set-Cookie overwriting behavior with respect to a document cookie.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Setting third-party cookie 'foo' through cross-origin WebSocket handshake and checking that it doesn't write first-party cookies.
+PASS cookieValue is ""
+
+Opening localhost third-party iframe to check its cookies.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+--------
+Frame: '<!--frame1-->'
+--------
+Cookies are: setAsFirstParty = value
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt
new file mode 100644 (file)
index 0000000..95b1ddd
--- /dev/null
@@ -0,0 +1,17 @@
+Make sure WebSocket object acts as EventTarget.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS open_event_handled is false
+PASS message_event_handled is false
+PASS close_event_handled is false
+PASS open_event_handled is true
+PASS open_event_handled is false
+PASS message_event_handled is true
+PASS message_event_handled is false
+PASS close_event_handled is true
+PASS close_event_handled is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt
new file mode 100644 (file)
index 0000000..ed9f0c2
--- /dev/null
@@ -0,0 +1,69 @@
+Test CloseEvent code and reason property in Worker.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+ws.onclose() was called.
+PASS PASS: worker: event.wasClean is false
+PASS PASS: worker: event.code is codeAbnormalClosure
+FAIL FAIL: worker: event.reason is not emptyString
+WebSocketTest.onopen() was called with testId = 0.
+WebSocketTest.onclose() was called with testId = 0.
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 1005
+PASS PASS: worker: event.reason is 
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 1005
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 1.
+WebSocketTest.onclose() was called with testId = 1.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 2.
+WebSocketTest.onclose() was called with testId = 2.
+PASS PASS: worker: event.wasClean is true
+PASS PASS: worker: event.code is 1000
+PASS PASS: worker: event.reason is ok
+PASS PASS: worker: event.wasClean is true
+PASS PASS: worker: event.code is 1000
+PASS PASS: worker: event.reason is ok
+WebSocketTest.onopen() was called with testId = 3.
+WebSocketTest.onclose() was called with testId = 3.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+FAIL FAIL: worker: event.reason is not 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+FAIL FAIL: worker: event.reason is not 
+WebSocketTest.onopen() was called with testId = 4.
+WebSocketTest.onclose() was called with testId = 4.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 5.
+WebSocketTest.onclose() was called with testId = 5.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 6.
+WebSocketTest.onclose() was called with testId = 6.
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 65535
+PASS PASS: worker: event.reason is good bye
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 65535
+PASS PASS: worker: event.reason is good bye
+DONE
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/workers/close-expected.txt b/LayoutTests/platform/gtk/http/tests/websocket/tests/hybi/workers/close-expected.txt
new file mode 100644 (file)
index 0000000..3ee4d81
--- /dev/null
@@ -0,0 +1,94 @@
+Verify WebSocket::close behaviors in Worker.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Invalid code test: 0
+Code 999 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 1
+Code 1001 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 2
+Code 2999 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 3
+Code 5000 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 4
+Code 66536 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 5
+Code 4294968296 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 6
+Code 2999.9 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 7
+Code NaN must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 8
+Code 0 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 9
+Code 100 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 10
+Code Infinity must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 11
+Code -Infinity must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 12
+Code NaN must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+PASS PASS: onerror() was called.
+runCodeTest: onclose().
+PASS PASS: worker: closeEvent.code is abnormalClosure
+Skip invalid string test.
+Reason test: 0
+  with invalid reason: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+Reason 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 must cause SyntaxError.
+PASS PASS: worker: result is false
+PASS PASS: worker: exceptionName is syntaxErr
+Reason test: 1
+  with invalid reason: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012©
+Reason 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012© must cause SyntaxError.
+PASS PASS: worker: result is false
+PASS PASS: worker: exceptionName is syntaxErr
+Reason test: 2
+PASS PASS: onerror() was called.
+runReasonTest: onclose().
+PASS PASS: worker: closeEvent.code is abnormalClosure
+Code and reason test: 0
+Code and reason must be
+  code  : 1000
+  reason: OK, Bye!
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+Code and reason test: 1
+Code and reason must be
+  code  : 3000
+  reason: 3000
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+Code and reason test: 2
+Code and reason must be
+  code  : 4000
+  reason: code is 4000
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+Code and reason test: 3
+Code and reason must be
+  code  : 4999
+  reason: © Google
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+DONE
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args-expected.txt
deleted file mode 100644 (file)
index e80b183..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-CONSOLE MESSAGE: line 137: Canvas area exceeds the maximum limit (width * height > 268435456).
-
-PASS createImageBitmap with a an HTMLCanvasElement source and sw set to 0 
-PASS createImageBitmap with a an HTMLCanvasElement source and sh set to 0 
-FAIL createImageBitmap with a an HTMLCanvasElement source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with a an HTMLVideoElement source and sw set to 0 
-PASS createImageBitmap with a an HTMLVideoElement source and sh set to 0 
-FAIL createImageBitmap with a an HTMLVideoElement source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with a an HTMLVideoElement from a data URL source and sw set to 0 
-PASS createImageBitmap with a an HTMLVideoElement from a data URL source and sh set to 0 
-FAIL createImageBitmap with a an HTMLVideoElement from a data URL source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with a a bitmap HTMLImageElement source and sw set to 0 
-PASS createImageBitmap with a a bitmap HTMLImageElement source and sh set to 0 
-FAIL createImageBitmap with a a bitmap HTMLImageElement source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with a a vector HTMLImageElement source and sw set to 0 
-PASS createImageBitmap with a a vector HTMLImageElement source and sh set to 0 
-FAIL createImageBitmap with a a vector HTMLImageElement source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-FAIL createImageBitmap with a a bitmap SVGImageElement source and sw set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
-FAIL createImageBitmap with a a bitmap SVGImageElement source and sh set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
-FAIL createImageBitmap with a a bitmap SVGImageElement source and oversized (unallocatable) crop region assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
-FAIL createImageBitmap with a a vector SVGImageElement source and sw set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
-FAIL createImageBitmap with a a vector SVGImageElement source and sh set to 0 assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "RangeError" ("RangeError")
-FAIL createImageBitmap with a a vector SVGImageElement source and oversized (unallocatable) crop region assert_throws: function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
-FAIL createImageBitmap with a an OffscreenCanvas source and sw set to 0 promise_test: Unhandled rejection with value: object "TypeError: null is not an object (evaluating 'testCtx.fillStyle = "rgb(255, 0, 0)"')"
-FAIL createImageBitmap with a an OffscreenCanvas source and sh set to 0 promise_test: Unhandled rejection with value: object "TypeError: null is not an object (evaluating 'testCtx.fillStyle = "rgb(255, 0, 0)"')"
-FAIL createImageBitmap with a an OffscreenCanvas source and oversized (unallocatable) crop region promise_test: Unhandled rejection with value: object "TypeError: null is not an object (evaluating 'testCtx.fillStyle = "rgb(255, 0, 0)"')"
-PASS createImageBitmap with a an ImageData source and sw set to 0 
-PASS createImageBitmap with a an ImageData source and sh set to 0 
-FAIL createImageBitmap with a an ImageData source and oversized (unallocatable) crop region assert_throws: function "function () { throw e }" threw object "TypeError: createImageBitmap with ImageData is not implemented" ("TypeError") expected object "InvalidStateError" ("InvalidStateError")
-PASS createImageBitmap with a an ImageBitmap source and sw set to 0 
-PASS createImageBitmap with a an ImageBitmap source and sh set to 0 
-FAIL createImageBitmap with a an ImageBitmap source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with a a Blob source and sw set to 0 
-PASS createImageBitmap with a a Blob source and sh set to 0 
-FAIL createImageBitmap with a a Blob source and oversized (unallocatable) crop region assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with undefined image source. 
-PASS createImageBitmap with null image source. 
-PASS createImageBitmap with CanvasRenderingContext2D image source. 
-PASS createImageBitmap with WebGLRenderingContext image source. 
-PASS createImageBitmap with Uint8Array image source. 
-PASS createImageBitmap with ArrayBuffer image source. 
-PASS createImageBitmap with empty image source. 
-PASS createImageBitmap with empty video source. 
-PASS createImageBitmap with an oversized canvas source. 
-FAIL createImageBitmap with an invalid OffscreenCanvas source. assert_throws: function "function () { throw e }" threw object "TypeError: Type error" that is not a DOMException InvalidStateError: property "code" is equal to undefined, expected 11
-PASS createImageBitmap with an undecodable blob source. 
-PASS createImageBitmap with a broken image source. 
-FAIL createImageBitmap with an available but undecodable image source. assert_unreached: Should have rejected: undefined Reached unreachable code
-FAIL createImageBitmap with an available but zero height image source. assert_unreached: Should have rejected: undefined Reached unreachable code
-FAIL createImageBitmap with an available but zero width image source. assert_unreached: Should have rejected: undefined Reached unreachable code
-PASS createImageBitmap with a closed ImageBitmap. 
-
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-illegal-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-illegal-expected.txt
deleted file mode 100644 (file)
index c02deb3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Pointer Events touch-action attribute support
-
-Test Description: Test will automatically check behaviour of following combinations: 'pan-x none', 'pan-y none', 'auto none'
-
-touch-action: none
-
-The following pointer types were detected: (none).
-
-
-PASS 'pan-x none' is corrected properly 
-PASS 'pan-y none' is corrected properly 
-PASS 'auto none' is corrected properly 
-
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt
new file mode 100644 (file)
index 0000000..42c01d7
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS Create WebSocket - wsocket.protocol should be empty before connection is established 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any.worker-expected.txt
new file mode 100644 (file)
index 0000000..42c01d7
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS Create WebSocket - wsocket.protocol should be empty before connection is established 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-65K-data.any-expected.txt
new file mode 100644 (file)
index 0000000..3abfb4f
--- /dev/null
@@ -0,0 +1,5 @@
+
+PASS Send 65K data on a WebSocket -  Connection should be opened 
+PASS Send 65K data on a WebSocket - Message should be received 
+PASS Send 65K data on a WebSocket - Connection should be closed 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-65K-arraybuffer.any-expected.txt
new file mode 100644 (file)
index 0000000..48eddcd
--- /dev/null
@@ -0,0 +1,5 @@
+
+PASS Send 65K binary data on a WebSocket - ArrayBuffer - Connection should be opened 
+PASS Send 65K binary data on a WebSocket - ArrayBuffer - Message should be received 
+PASS Send 65K binary data on a WebSocket - ArrayBuffer - Connection should be closed 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-binary-arraybuffer.any-expected.txt
new file mode 100644 (file)
index 0000000..ba12adc
--- /dev/null
@@ -0,0 +1,5 @@
+
+PASS Send binary data on a WebSocket - ArrayBuffer - Connection should be opened 
+PASS Send binary data on a WebSocket - ArrayBuffer - Message should be received 
+PASS Send binary data on a WebSocket - ArrayBuffer - Connection should be closed 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-data.any-expected.txt
new file mode 100644 (file)
index 0000000..e8f9467
--- /dev/null
@@ -0,0 +1,5 @@
+
+PASS Send data on a WebSocket - Connection should be opened 
+PASS Send data on a WebSocket - Message should be received 
+PASS Send data on a WebSocket - Connection should be closed 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/Send-paired-surrogates.any-expected.txt
new file mode 100644 (file)
index 0000000..5a359f7
--- /dev/null
@@ -0,0 +1,5 @@
+
+PASS Send (paired surrogates) data on a WebSocket - Connection should be opened 
+PASS Send (paired surrogates) data on a WebSocket - Message should be received 
+PASS Send (paired surrogates) data on a WebSocket - Connection should be closed 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any-expected.txt
new file mode 100644 (file)
index 0000000..3e38cec
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS HTTP basic authentication should work with WebSockets 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/basic-auth.any.worker-expected.txt
new file mode 100644 (file)
index 0000000..3e38cec
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS HTTP basic authentication should work with WebSockets 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/closing-handshake/003-expected.txt
new file mode 100644 (file)
index 0000000..53a709d
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL WebSockets: client sends closing handshake assert_equals: e.code expected 1005 but got 1011
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/cookies/004-expected.txt
new file mode 100644 (file)
index 0000000..b680e5e
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL WebSockets: setting HttpOnly cookies in ws response, checking document.cookie assert_unreached: error Reached unreachable code
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer-expected.txt
new file mode 100644 (file)
index 0000000..6e94a13
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: bufferedAmount for ArrayBuffer 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob-expected.txt
new file mode 100644 (file)
index 0000000..bf061e4
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: bufferedAmount for blob 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting-expected.txt
new file mode 100644 (file)
index 0000000..54a8275
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: delete bufferedAmount 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large-expected.txt
new file mode 100644 (file)
index 0000000..16c63b5
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: bufferedAmount for 65K data 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode-expected.txt
new file mode 100644 (file)
index 0000000..0b928cb
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL WebSockets: bufferedAmount for unicode data assert_equals: expected 6 but got 12
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-multiple-expected.txt
new file mode 100644 (file)
index 0000000..d94eca3
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: close() several times 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-nested-expected.txt
new file mode 100644 (file)
index 0000000..0699ed0
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL WebSockets: close() in close event handler assert_equals: expected 2 but got 3
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/close/close-return-expected.txt
new file mode 100644 (file)
index 0000000..1339645
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: close() return value 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/017-expected.txt
new file mode 100644 (file)
index 0000000..1b24e37
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: this, e.target, e.currentTarget, e.eventPhase 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/018-expected.txt
new file mode 100644 (file)
index 0000000..50baec8
--- /dev/null
@@ -0,0 +1,6 @@
+
+PASS open event 
+PASS message event 
+PASS error event 
+PASS close event 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/events/019-expected.txt
new file mode 100644 (file)
index 0000000..a92f7a5
--- /dev/null
@@ -0,0 +1,6 @@
+
+PASS WebSockets: removeEventListener 
+PASS WebSockets: removeEventListener 1 
+PASS WebSockets: removeEventListener 2 
+PASS WebSockets: removeEventListener 3 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/interfaces/WebSocket/readyState/003-expected.txt
new file mode 100644 (file)
index 0000000..4acf669
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL WebSockets: delete readyState assert_equals: delete ws.readyState expected 2 but got 3
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/001-expected.txt
new file mode 100644 (file)
index 0000000..fafbace
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: invalid handshake 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/003-sets-origin.worker-expected.txt
new file mode 100644 (file)
index 0000000..3392e42
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL origin set in a Worker assert_unreached: Reached unreachable code
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/opening-handshake/005-expected.txt
new file mode 100644 (file)
index 0000000..6e73599
--- /dev/null
@@ -0,0 +1,5 @@
+
+Harness Error (TIMEOUT), message = null
+
+TIMEOUT WebSockets: proper first line Test timed out
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/security/001-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/websockets/security/001-expected.txt
new file mode 100644 (file)
index 0000000..6a84e1d
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS WebSockets: wrong accept key 
+
diff --git a/LayoutTests/platform/gtk/js/intl-datetimeformat-expected.txt b/LayoutTests/platform/gtk/js/intl-datetimeformat-expected.txt
deleted file mode 100644 (file)
index 55dbb98..0000000
+++ /dev/null
@@ -1,2550 +0,0 @@
-This test checks the behavior of Intl.DateTimeFormat as described in the ECMAScript Internationalization API Specification (ECMA-402 2.0).
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS Intl.DateTimeFormat is an instance of Function
-PASS Intl.DateTimeFormat() is an instance of Intl.DateTimeFormat
-PASS Intl.DateTimeFormat.call({}) is an instance of Intl.DateTimeFormat
-PASS new Intl.DateTimeFormat() is an instance of Intl.DateTimeFormat
-PASS class DerivedDateTimeFormat extends Intl.DateTimeFormat {};(new DerivedDateTimeFormat) instanceof DerivedDateTimeFormat is true
-PASS class DerivedDateTimeFormat extends Intl.DateTimeFormat {};(new DerivedDateTimeFormat) instanceof Intl.DateTimeFormat is true
-PASS class DerivedDateTimeFormat extends Intl.DateTimeFormat {};new DerivedDateTimeFormat('en').format(0).length > 0 is true
-PASS class DerivedDateTimeFormat extends Intl.DateTimeFormat {};Object.getPrototypeOf(new DerivedDateTimeFormat) === DerivedDateTimeFormat.prototype is true
-PASS class DerivedDateTimeFormat extends Intl.DateTimeFormat {};Object.getPrototypeOf(Object.getPrototypeOf(new DerivedDateTimeFormat)) === Intl.DateTimeFormat.prototype is true
-PASS Intl.DateTimeFormat.length is 0
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype').writable is false
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype').enumerable is false
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype').configurable is false
-PASS Intl.DateTimeFormat.supportedLocalesOf.length is 1
-PASS Intl.DateTimeFormat.supportedLocalesOf() is an instance of Array
-PASS Intl.DateTimeFormat.supportedLocalesOf.call(null, 'en') is [ 'en' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf.call({}, 'en') is [ 'en' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf.call(1, 'en') is [ 'en' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf(9) is []
-PASS Intl.DateTimeFormat.supportedLocalesOf('en') is [ 'en' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf({ length: 4, 1: 'en', 0: 'es', 3: 'de' }) is [ 'es', 'en', 'de' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf([ 'en', 'pt', 'en', 'es' ]) is [ 'en', 'pt', 'es' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf('En-laTn-us-variant2-variant1-1abc-U-ko-tRue-A-aa-aaa-x-RESERVED') is [ 'en-Latn-US-variant2-variant1-1abc-a-aa-aaa-u-ko-true-x-reserved' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf('no-bok') is [ 'nb' ]
-PASS Intl.DateTimeFormat.supportedLocalesOf('x-some-thing') is []
-PASS Intl.DateTimeFormat.supportedLocalesOf(Object.create(null, { length: { get() { throw Error('a') } } })) threw exception Error: a.
-PASS Intl.DateTimeFormat.supportedLocalesOf(Object.create(null, { length: { value: 1 }, 0: { get() { throw Error('b') } } })) threw exception Error: b.
-PASS Intl.DateTimeFormat.supportedLocalesOf([ { toString() { throw Error('c') } } ]) threw exception Error: c.
-PASS Intl.DateTimeFormat.supportedLocalesOf([ 5 ]) threw exception TypeError: locale value must be a string or object.
-PASS Intl.DateTimeFormat.supportedLocalesOf('') threw exception RangeError: invalid language tag: .
-PASS Intl.DateTimeFormat.supportedLocalesOf('a') threw exception RangeError: invalid language tag: a.
-PASS Intl.DateTimeFormat.supportedLocalesOf('abcdefghij') threw exception RangeError: invalid language tag: abcdefghij.
-PASS Intl.DateTimeFormat.supportedLocalesOf('#$') threw exception RangeError: invalid language tag: #$.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en-@-abc') threw exception RangeError: invalid language tag: en-@-abc.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en-u') threw exception RangeError: invalid language tag: en-u.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en-u-kn-true-u-ko-true') threw exception RangeError: invalid language tag: en-u-kn-true-u-ko-true.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en-x') threw exception RangeError: invalid language tag: en-x.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en-*') threw exception RangeError: invalid language tag: en-*.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en-') threw exception RangeError: invalid language tag: en-.
-PASS Intl.DateTimeFormat.supportedLocalesOf('en--US') threw exception RangeError: invalid language tag: en--US.
-PASS Intl.DateTimeFormat.supportedLocalesOf('de') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('de-DE') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('DE-de') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('cmn') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('cmn-Hans') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('CMN-hANS') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('cmn-hans-cn') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('es-419') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('es-419-u-nu-latn-cu-bob') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('i-klingon') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('cmn-hans-cn-t-ca-u-ca-x-t-u') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('enochian-enochian') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('de-gregory-u-ca-gregory') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('aa-a-foo-x-a-foo-bar') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('x-en-US-12345') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('x-12345-12345-en-US') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('x-en-US-12345-12345') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('x-en-u-foo') did not throw exception.
-PASS Intl.DateTimeFormat.supportedLocalesOf('x-en-u-foo-u-bar') did not throw exception.
-PASS Object.getPrototypeOf(Intl.DateTimeFormat.prototype) is Object.prototype
-PASS Intl.DateTimeFormat.prototype.constructor is Intl.DateTimeFormat
-PASS Intl.DateTimeFormat.prototype[Symbol.toStringTag] is 'Object'
-PASS Object.prototype.toString.call(Intl.DateTimeFormat.prototype) is '[object Object]'
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, Symbol.toStringTag).writable is false
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, Symbol.toStringTag).enumerable is false
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, Symbol.toStringTag).configurable is true
-PASS defaultDTFormat.format is an instance of Function
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').get is an instance of Function
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').set is undefined
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').enumerable is false
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').configurable is true
-PASS defaultDTFormat.format.length is 1
-PASS Intl.DateTimeFormat.prototype.format threw exception TypeError: Intl.DateTimeFormat.prototype.format called on value that's not an object initialized as a DateTimeFormat.
-PASS Object.defineProperty({}, 'format', Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format')).format threw exception TypeError: Intl.DateTimeFormat.prototype.format called on value that's not an object initialized as a DateTimeFormat.
-PASS new Intl.DateTimeFormat().format !== new Intl.DateTimeFormat().format is true
-PASS defaultDTFormat.format({ valueOf() { throw Error('4b') } }) threw exception Error: 4b.
-PASS defaultDTFormat.format(Infinity) threw exception RangeError: date value is not finite in DateTimeFormat format().
-PASS defaultDTFormat.format.call(null, 0) is Intl.DateTimeFormat().format(0)
-PASS defaultDTFormat.format.call(Intl.DateTimeFormat('ar'), 0) is Intl.DateTimeFormat().format(0)
-PASS defaultDTFormat.format.call(5, 0) is Intl.DateTimeFormat().format(0)
-PASS typeof defaultDTFormat.format() === 'string' is true
-PASS Intl.DateTimeFormat('en', { timeZone: 'America/Denver' }).format(new Date(1451099872641)) is '12/25/2015'
-PASS Intl.DateTimeFormat.prototype.resolvedOptions.length is 0
-PASS defaultDTFormat.resolvedOptions() is an instance of Object
-PASS defaultDTFormat.resolvedOptions() === defaultDTFormat.resolvedOptions() is false
-PASS Intl.DateTimeFormat.prototype.resolvedOptions() threw exception TypeError: Intl.DateTimeFormat.prototype.resolvedOptions called on value that's not an object initialized as a DateTimeFormat.
-PASS Intl.DateTimeFormat.prototype.resolvedOptions.call(5) threw exception TypeError: Intl.DateTimeFormat.prototype.resolvedOptions called on value that's not an object initialized as a DateTimeFormat.
-PASS Intl.DateTimeFormat('$') threw exception RangeError: invalid language tag: $.
-PASS Intl.DateTimeFormat('en', null) threw exception TypeError: null is not an object (evaluating 'Intl.DateTimeFormat('en', null)').
-PASS Intl.DateTimeFormat('en').resolvedOptions().weekday is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().era is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().month is 'numeric'
-PASS Intl.DateTimeFormat('en').resolvedOptions().day is 'numeric'
-PASS Intl.DateTimeFormat('en').resolvedOptions().year is 'numeric'
-PASS Intl.DateTimeFormat('en').resolvedOptions().hour is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().hourCycle is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().hour12 is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().minute is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().second is undefined
-PASS Intl.DateTimeFormat('en').resolvedOptions().timeZoneName is undefined
-PASS Intl.DateTimeFormat('ar', { timeZone: 'America/Denver' }).format(1451099872641) is '٢٥‏/١٢‏/٢٠١٥'
-PASS Intl.DateTimeFormat('de', { timeZone: 'America/Denver' }).format(1451099872641) is '25.12.2015'
-PASS Intl.DateTimeFormat('ja', { timeZone: 'America/Denver' }).format(1451099872641) is '2015/12/25'
-PASS Intl.DateTimeFormat('pt', { timeZone: 'America/Denver' }).format(1451099872641) is '25/12/2015'
-PASS Intl.DateTimeFormat('en', { localeMatcher: { toString() { throw 'nope' } } }) threw exception nope.
-PASS Intl.DateTimeFormat('en', { localeMatcher:'bad' }) threw exception RangeError: localeMatcher must be either "lookup" or "best fit".
-PASS Intl.DateTimeFormat('en', { localeMatcher:'lookup' }) did not throw exception.
-PASS Intl.DateTimeFormat('en', { localeMatcher:'best fit' }) did not throw exception.
-PASS Intl.DateTimeFormat('en', { formatMatcher: { toString() { throw 'nope' } } }) threw exception nope.
-PASS Intl.DateTimeFormat('en', { formatMatcher:'bad' }) threw exception RangeError: formatMatcher must be either "basic" or "best fit".
-PASS Intl.DateTimeFormat('en', { formatMatcher:'basic' }) did not throw exception.
-PASS Intl.DateTimeFormat('en', { formatMatcher:'best fit' }) did not throw exception.
-PASS Intl.DateTimeFormat('en', { timeZone: 'nowhere/bogus' }) threw exception RangeError: invalid time zone: nowhere/bogus.
-PASS Intl.DateTimeFormat('en', { timeZone: { toString() { throw 'nope' } } }) threw exception nope.
-PASS Intl.DateTimeFormat('en', { timeZone: 'america/denver' }).resolvedOptions().timeZone is 'America/Denver'
-PASS Intl.DateTimeFormat('en', { timeZone: 'AMERICA/LOS_ANGELES' }).resolvedOptions().timeZone is 'America/Los_Angeles'
-PASS Intl.DateTimeFormat('en', { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }).resolvedOptions().timeZone is Intl.DateTimeFormat().resolvedOptions().timeZone
-PASS Intl.DateTimeFormat('en', { timeZone: 'Australia/ACT' }).resolvedOptions().timeZone is 'Australia/Sydney'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Australia/North' }).resolvedOptions().timeZone is 'Australia/Darwin'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Australia/South' }).resolvedOptions().timeZone is 'Australia/Adelaide'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Australia/West' }).resolvedOptions().timeZone is 'Australia/Perth'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Brazil/East' }).resolvedOptions().timeZone is 'America/Sao_Paulo'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Brazil/West' }).resolvedOptions().timeZone is 'America/Manaus'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Canada/Atlantic' }).resolvedOptions().timeZone is 'America/Halifax'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Canada/Central' }).resolvedOptions().timeZone is 'America/Winnipeg'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Canada/Eastern' }).resolvedOptions().timeZone is 'America/Toronto'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Canada/Mountain' }).resolvedOptions().timeZone is 'America/Edmonton'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Canada/Pacific' }).resolvedOptions().timeZone is 'America/Vancouver'
-PASS Intl.DateTimeFormat('en', { timeZone: 'GB' }).resolvedOptions().timeZone is 'Europe/London'
-PASS Intl.DateTimeFormat('en', { timeZone: 'GMT+0' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'GMT-0' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'GMT0' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Greenwich' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'UCT' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'US/Central' }).resolvedOptions().timeZone is 'America/Chicago'
-PASS Intl.DateTimeFormat('en', { timeZone: 'US/Eastern' }).resolvedOptions().timeZone is 'America/New_York'
-PASS Intl.DateTimeFormat('en', { timeZone: 'US/Michigan' }).resolvedOptions().timeZone is 'America/Detroit'
-PASS Intl.DateTimeFormat('en', { timeZone: 'US/Mountain' }).resolvedOptions().timeZone is 'America/Denver'
-PASS Intl.DateTimeFormat('en', { timeZone: 'US/Pacific' }).resolvedOptions().timeZone is 'America/Los_Angeles'
-PASS Intl.DateTimeFormat('en', { timeZone: 'UTC' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Universal' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Zulu' }).resolvedOptions().timeZone is 'UTC'
-PASS Intl.DateTimeFormat('en', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/2015'
-PASS Intl.DateTimeFormat('en', { timeZone: 'Pacific/Auckland' }).format(1451099872641) is '12/26/2015'
-PASS Intl.DateTimeFormat('ar-sa').resolvedOptions().locale is 'ar-SA'
-PASS Intl.DateTimeFormat('fa-IR').resolvedOptions().calendar is 'persian'
-PASS Intl.DateTimeFormat('ar').resolvedOptions().numberingSystem is 'arab'
-PASS Intl.DateTimeFormat('en', { calendar:'dangi' }).resolvedOptions().calendar is 'gregory'
-PASS Intl.DateTimeFormat('en-u-ca-bogus').resolvedOptions().locale is 'en'
-PASS Intl.DateTimeFormat('en-u-ca-bogus').resolvedOptions().calendar is 'gregory'
-PASS Intl.DateTimeFormat('en-u-ca-buddhist').resolvedOptions().locale is 'en-u-ca-buddhist'
-PASS Intl.DateTimeFormat('en-u-ca-buddhist').resolvedOptions().calendar is 'buddhist'
-PASS Intl.DateTimeFormat('en-u-ca-chinese').resolvedOptions().calendar is 'chinese'
-PASS Intl.DateTimeFormat('en-u-ca-coptic').resolvedOptions().calendar is 'coptic'
-PASS Intl.DateTimeFormat('en-u-ca-dangi').resolvedOptions().calendar is 'dangi'
-PASS Intl.DateTimeFormat('en-u-ca-ethioaa').resolvedOptions().calendar is 'ethiopic-amete-alem'
-PASS Intl.DateTimeFormat('en-u-ca-ethiopic').resolvedOptions().calendar is 'ethiopic'
-PASS Intl.DateTimeFormat('ar-SA-u-ca-gregory').resolvedOptions().calendar is 'gregory'
-PASS Intl.DateTimeFormat('en-u-ca-hebrew').resolvedOptions().calendar is 'hebrew'
-PASS Intl.DateTimeFormat('en-u-ca-indian').resolvedOptions().calendar is 'indian'
-PASS Intl.DateTimeFormat('en-u-ca-islamic').resolvedOptions().calendar is 'islamic'
-PASS Intl.DateTimeFormat('en-u-ca-islamicc').resolvedOptions().calendar is 'islamic-civil'
-PASS Intl.DateTimeFormat('en-u-ca-ISO8601').resolvedOptions().calendar is 'iso8601'
-PASS Intl.DateTimeFormat('en-u-ca-japanese').resolvedOptions().calendar is 'japanese'
-PASS Intl.DateTimeFormat('en-u-ca-persian').resolvedOptions().calendar is 'persian'
-PASS Intl.DateTimeFormat('en-u-ca-roc').resolvedOptions().calendar is 'roc'
-PASS Intl.DateTimeFormat('en-u-ca-ethiopic-amete-alem').resolvedOptions().calendar is 'ethiopic-amete-alem'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-umalqura').resolvedOptions().calendar is 'islamic-umalqura'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-tbla').resolvedOptions().calendar is 'islamic-tbla'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-civil').resolvedOptions().calendar is 'islamic-civil'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-rgsa').resolvedOptions().calendar is 'islamic-rgsa'
-PASS Intl.DateTimeFormat('en-u-ca-buddhist', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/2558'
-PASS Intl.DateTimeFormat('en-u-ca-chinese', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '11/15/32'
-PASS Intl.DateTimeFormat('en-u-ca-coptic', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '4/15/1732'
-PASS Intl.DateTimeFormat('en-u-ca-dangi', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '11/15/32'
-PASS Intl.DateTimeFormat('en-u-ca-ethioaa', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '4/15/7508'
-PASS Intl.DateTimeFormat('en-u-ca-ethiopic', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '4/15/2008'
-PASS Intl.DateTimeFormat('en-u-ca-gregory', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/2015'
-PASS Intl.DateTimeFormat('en-u-ca-hebrew', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '4/13/5776'
-PASS Intl.DateTimeFormat('en-u-ca-indian', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '10/4/1937'
-PASS Intl.DateTimeFormat('en-u-ca-islamic', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '3/14/1437'
-PASS Intl.DateTimeFormat('en-u-ca-islamicc', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '3/13/1437'
-PASS Intl.DateTimeFormat('en-u-ca-ISO8601', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/2015'
-PASS Intl.DateTimeFormat('en-u-ca-japanese', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/27'
-PASS Intl.DateTimeFormat('en-u-ca-persian', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '10/4/1394'
-PASS Intl.DateTimeFormat('en-u-ca-roc', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/104'
-PASS Intl.DateTimeFormat('en-u-ca-ethiopic-amete-alem', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '4/15/7508'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-umalqura', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '3/14/1437'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-tbla', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '3/14/1437'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-civil', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '3/13/1437'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-rgsa', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '3/14/1437'
-PASS Intl.DateTimeFormat('en', { numberingSystem:'gujr' }).resolvedOptions().numberingSystem is 'latn'
-PASS Intl.DateTimeFormat('en-u-nu-bogus').resolvedOptions().locale is 'en'
-PASS Intl.DateTimeFormat('en-u-nu-bogus').resolvedOptions().numberingSystem is 'latn'
-PASS Intl.DateTimeFormat('en-u-nu-latn').resolvedOptions().numberingSystem is 'latn'
-PASS Intl.DateTimeFormat('en-u-nu-arab').resolvedOptions().locale is 'en-u-nu-arab'
-PASS Intl.DateTimeFormat('en-u-nu-arab').resolvedOptions().numberingSystem is 'arab'
-PASS Intl.DateTimeFormat('en-u-nu-arabext').resolvedOptions().numberingSystem is 'arabext'
-PASS Intl.DateTimeFormat('en-u-nu-bali').resolvedOptions().numberingSystem is 'bali'
-PASS Intl.DateTimeFormat('en-u-nu-beng').resolvedOptions().numberingSystem is 'beng'
-PASS Intl.DateTimeFormat('en-u-nu-deva').resolvedOptions().numberingSystem is 'deva'
-PASS Intl.DateTimeFormat('en-u-nu-fullwide').resolvedOptions().numberingSystem is 'fullwide'
-PASS Intl.DateTimeFormat('en-u-nu-gujr').resolvedOptions().numberingSystem is 'gujr'
-PASS Intl.DateTimeFormat('en-u-nu-guru').resolvedOptions().numberingSystem is 'guru'
-PASS Intl.DateTimeFormat('en-u-nu-hanidec').resolvedOptions().numberingSystem is 'hanidec'
-PASS Intl.DateTimeFormat('en-u-nu-khmr').resolvedOptions().numberingSystem is 'khmr'
-PASS Intl.DateTimeFormat('en-u-nu-knda').resolvedOptions().numberingSystem is 'knda'
-PASS Intl.DateTimeFormat('en-u-nu-laoo').resolvedOptions().numberingSystem is 'laoo'
-PASS Intl.DateTimeFormat('en-u-nu-latn').resolvedOptions().numberingSystem is 'latn'
-PASS Intl.DateTimeFormat('en-u-nu-limb').resolvedOptions().numberingSystem is 'limb'
-PASS Intl.DateTimeFormat('en-u-nu-mlym').resolvedOptions().numberingSystem is 'mlym'
-PASS Intl.DateTimeFormat('en-u-nu-mong').resolvedOptions().numberingSystem is 'mong'
-PASS Intl.DateTimeFormat('en-u-nu-mymr').resolvedOptions().numberingSystem is 'mymr'
-PASS Intl.DateTimeFormat('en-u-nu-orya').resolvedOptions().numberingSystem is 'orya'
-PASS Intl.DateTimeFormat('en-u-nu-tamldec').resolvedOptions().numberingSystem is 'tamldec'
-PASS Intl.DateTimeFormat('en-u-nu-telu').resolvedOptions().numberingSystem is 'telu'
-PASS Intl.DateTimeFormat('en-u-nu-thai').resolvedOptions().numberingSystem is 'thai'
-PASS Intl.DateTimeFormat('en-u-nu-tibt').resolvedOptions().numberingSystem is 'tibt'
-PASS Intl.DateTimeFormat('en-u-nu-arab', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '١٢/٢٥/٢٠١٥'
-PASS Intl.DateTimeFormat('en-u-nu-arabext', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '۱۲/۲۵/۲۰۱۵'
-PASS Intl.DateTimeFormat('en-u-nu-bali', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '᭑᭒/᭒᭕/᭒᭐᭑᭕'
-PASS Intl.DateTimeFormat('en-u-nu-beng', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '১২/২৫/২০১৫'
-PASS Intl.DateTimeFormat('en-u-nu-deva', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '१२/२५/२०१५'
-PASS Intl.DateTimeFormat('en-u-nu-fullwide', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/2015'
-PASS Intl.DateTimeFormat('en-u-nu-gujr', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '૧૨/૨૫/૨૦૧૫'
-PASS Intl.DateTimeFormat('en-u-nu-guru', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '੧੨/੨੫/੨੦੧੫'
-PASS Intl.DateTimeFormat('en-u-nu-hanidec', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '一二/二五/二〇一五'
-PASS Intl.DateTimeFormat('en-u-nu-khmr', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '១២/២៥/២០១៥'
-PASS Intl.DateTimeFormat('en-u-nu-knda', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '೧೨/೨೫/೨೦೧೫'
-PASS Intl.DateTimeFormat('en-u-nu-laoo', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '໑໒/໒໕/໒໐໑໕'
-PASS Intl.DateTimeFormat('en-u-nu-latn', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '12/25/2015'
-PASS Intl.DateTimeFormat('en-u-nu-limb', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '᥇᥈/᥈᥋/᥈᥆᥇᥋'
-PASS Intl.DateTimeFormat('en-u-nu-mlym', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '൧൨/൨൫/൨൦൧൫'
-PASS Intl.DateTimeFormat('en-u-nu-mong', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '᠑᠒/᠒᠕/᠒᠐᠑᠕'
-PASS Intl.DateTimeFormat('en-u-nu-mymr', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '၁၂/၂၅/၂၀၁၅'
-PASS Intl.DateTimeFormat('en-u-nu-orya', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '୧୨/୨୫/୨୦୧୫'
-PASS Intl.DateTimeFormat('en-u-nu-tamldec', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '௧௨/௨௫/௨௦௧௫'
-PASS Intl.DateTimeFormat('en-u-nu-telu', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '౧౨/౨౫/౨౦౧౫'
-PASS Intl.DateTimeFormat('en-u-nu-thai', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '๑๒/๒๕/๒๐๑๕'
-PASS Intl.DateTimeFormat('en-u-nu-tibt', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '༡༢/༢༥/༢༠༡༥'
-PASS Intl.DateTimeFormat('en-u-hc-h11').resolvedOptions().locale is 'en-u-hc-h11'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric', hourCycle: 'h12' }).resolvedOptions().locale is 'en'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric', hourCycle: 'h12' }).resolvedOptions().hourCycle is 'h12'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric', hourCycle: 'h11', hour12: true }).resolvedOptions().locale is 'en'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric', hourCycle: 'h11', hour12: true }).resolvedOptions().hourCycle is 'h12'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric', hourCycle: 'h11', hour12: false }).resolvedOptions().hourCycle is 'h23'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric' }).resolvedOptions().hourCycle is 'h11'
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric' }).resolvedOptions().hour12 is true
-PASS Intl.DateTimeFormat('en-u-hc-h11', { hour: 'numeric', timeZone: 'UTC' }).format(12 * 60 * 60 * 1000).slice(0, 1) is '0'
-PASS Intl.DateTimeFormat('en-u-hc-h12', { hour: 'numeric' }).resolvedOptions().hourCycle is 'h12'
-PASS Intl.DateTimeFormat('en-u-hc-h12', { hour: 'numeric' }).resolvedOptions().hour12 is true
-PASS Intl.DateTimeFormat('en-u-hc-h12', { hour: 'numeric', timeZone: 'UTC' }).format(12 * 60 * 60 * 1000).slice(0, 2) is '12'
-PASS Intl.DateTimeFormat('en-u-hc-h23', { hour: 'numeric' }).resolvedOptions().hourCycle is 'h23'
-PASS Intl.DateTimeFormat('en-u-hc-h23', { hour: 'numeric' }).resolvedOptions().hour12 is false
-PASS Intl.DateTimeFormat('en-u-hc-h23', { hour: 'numeric', timeZone: 'UTC' }).format(0) is '00'
-PASS Intl.DateTimeFormat('en-u-hc-h24', { hour: 'numeric' }).resolvedOptions().hourCycle is 'h24'
-PASS Intl.DateTimeFormat('en-u-hc-h24', { hour: 'numeric' }).resolvedOptions().hour12 is false
-PASS Intl.DateTimeFormat('en-u-hc-h24', { hour: 'numeric', timeZone: 'UTC' }).format(0) is '24'
-PASS Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-arab', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '٣/١٤/١٤٣٧'
-PASS Intl.DateTimeFormat('en', { weekday: { toString() { throw 'weekday' } } }) threw exception weekday.
-PASS Intl.DateTimeFormat('en', { weekday:'invalid' }) threw exception RangeError: weekday must be "narrow", "short", or "long".
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().weekday is undefined
-PASS Intl.DateTimeFormat('en', { weekday:'narrow', month:'numeric', day:'numeric' }).resolvedOptions().weekday is 'narrow'
-PASS Intl.DateTimeFormat('en', { weekday:'narrow', month:'numeric', day:'numeric', timeZone: 'UTC' }).format(0) is 'T, 1/1'
-PASS Intl.DateTimeFormat('en', { weekday:'short', month:'numeric', day:'numeric' }).resolvedOptions().weekday is 'short'
-PASS Intl.DateTimeFormat('en', { weekday:'short', month:'numeric', day:'numeric', timeZone: 'UTC' }).format(0) is 'Thu, 1/1'
-PASS Intl.DateTimeFormat('en', { weekday:'long', month:'numeric', day:'numeric' }).resolvedOptions().weekday is 'long'
-PASS Intl.DateTimeFormat('en', { weekday:'long', month:'numeric', day:'numeric', timeZone: 'UTC' }).format(0) is 'Thursday, 1/1'
-PASS Intl.DateTimeFormat('en', { era: { toString() { throw 'era' } } }) threw exception era.
-PASS Intl.DateTimeFormat('en', { era:'never' }) threw exception RangeError: era must be "narrow", "short", or "long".
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().day is undefined
-PASS Intl.DateTimeFormat('en', { era:'narrow', year:'numeric' }).resolvedOptions().era is 'narrow'
-PASS Intl.DateTimeFormat('en', { era:'narrow', year:'numeric', timeZone: 'UTC' }).format(0) is '1970 A'
-PASS Intl.DateTimeFormat('en', { era:'short', year:'numeric' }).resolvedOptions().era is 'short'
-PASS Intl.DateTimeFormat('en', { era:'short', year:'numeric', timeZone: 'UTC' }).format(0) is '1970 AD'
-PASS Intl.DateTimeFormat('en', { era:'long', year:'numeric' }).resolvedOptions().era is 'long'
-PASS Intl.DateTimeFormat('en', { era:'long', year:'numeric', timeZone: 'UTC' }).format(0) is '1970 Anno Domini'
-PASS Intl.DateTimeFormat('en', { year: { toString() { throw 'year' } } }) threw exception year.
-PASS Intl.DateTimeFormat('en', { year:'nope' }) threw exception RangeError: year must be "2-digit" or "numeric".
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().year is undefined
-PASS Intl.DateTimeFormat('en', { era:'narrow', year:'2-digit' }).resolvedOptions().year is '2-digit'
-PASS Intl.DateTimeFormat('en', { era:'narrow', year:'2-digit', timeZone: 'UTC' }).format(0) is '70 A'
-PASS Intl.DateTimeFormat('en', { era:'narrow', year:'numeric' }).resolvedOptions().year is 'numeric'
-PASS Intl.DateTimeFormat('en', { era:'narrow', year:'numeric', timeZone: 'UTC' }).format(0) is '1970 A'
-PASS Intl.DateTimeFormat('en', { month: { toString() { throw 'month' } } }) threw exception month.
-PASS Intl.DateTimeFormat('en', { month:2 }) threw exception RangeError: month must be "2-digit", "numeric", "narrow", "short", or "long".
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().month is undefined
-PASS Intl.DateTimeFormat('en', { month:'2-digit', year:'numeric' }).resolvedOptions().month is '2-digit'
-PASS Intl.DateTimeFormat('en', { month:'2-digit', year:'numeric', timeZone: 'UTC' }).format(0) is '01/1970'
-PASS Intl.DateTimeFormat('en', { month:'numeric', year:'numeric' }).resolvedOptions().month is 'numeric'
-PASS Intl.DateTimeFormat('en', { month:'numeric', year:'numeric', timeZone: 'UTC' }).format(0) is '1/1970'
-PASS Intl.DateTimeFormat('en', { month:'narrow', year:'numeric' }).resolvedOptions().month is 'narrow'
-PASS Intl.DateTimeFormat('en', { month:'narrow', year:'numeric', timeZone: 'UTC' }).format(0) is 'J 1970'
-PASS Intl.DateTimeFormat('en', { month:'short', year:'numeric' }).resolvedOptions().month is 'short'
-PASS Intl.DateTimeFormat('en', { month:'short', year:'numeric', timeZone: 'UTC' }).format(0) is 'Jan 1970'
-PASS Intl.DateTimeFormat('en', { month:'long', year:'numeric' }).resolvedOptions().month is 'long'
-PASS Intl.DateTimeFormat('en', { month:'long', year:'numeric', timeZone: 'UTC' }).format(0) is 'January 1970'
-PASS Intl.DateTimeFormat('en', { day: { toString() { throw 'day' } } }) threw exception day.
-PASS Intl.DateTimeFormat('en', { day:'' }) threw exception RangeError: day must be "2-digit" or "numeric".
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().day is undefined
-PASS Intl.DateTimeFormat('en', { month:'long', day:'2-digit' }).resolvedOptions().day is '2-digit'
-PASS Intl.DateTimeFormat('en', { month:'long', day:'2-digit', timeZone: 'UTC' }).format(0) is 'January 01'
-PASS Intl.DateTimeFormat('en', { month:'long', day:'numeric' }).resolvedOptions().day is 'numeric'
-PASS Intl.DateTimeFormat('en', { month:'long', day:'numeric', timeZone: 'UTC' }).format(0) is 'January 1'
-PASS Intl.DateTimeFormat('en', { hour: { toString() { throw 'hour' } } }) threw exception hour.
-PASS Intl.DateTimeFormat('en', { hour:[] }) threw exception RangeError: hour must be "2-digit" or "numeric".
-PASS Intl.DateTimeFormat('en').resolvedOptions().hour is undefined
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'2-digit' }).resolvedOptions().hour is '2-digit'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'2-digit', timeZone: 'UTC' }).format(0) is '12:00 AM'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().hour is 'numeric'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric', timeZone: 'UTC' }).format(0) is '12:00 AM'
-PASS Intl.DateTimeFormat('en').resolvedOptions().hour12 is undefined
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().hourCycle is 'h12'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().hour12 is true
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric', timeZone: 'UTC' }).format(0) is '12:00 AM'
-PASS Intl.DateTimeFormat('pt-BR', { minute:'2-digit', hour:'numeric' }).resolvedOptions().hourCycle is 'h23'
-PASS Intl.DateTimeFormat('pt-BR', { minute:'2-digit', hour:'numeric' }).resolvedOptions().hour12 is false
-PASS Intl.DateTimeFormat('pt-BR', { minute:'2-digit', hour:'numeric', timeZone: 'UTC' }).format(0) is '0:00'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'2-digit', hour12: false, timeZone: 'UTC' }).format(0) is '00:00'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'2-digit', hour12: true, timeZone: 'UTC' }).format(1e7) is '02:46 AM'
-PASS Intl.DateTimeFormat('en', { minute: { toString() { throw 'minute' } } }) threw exception minute.
-PASS Intl.DateTimeFormat('en', { minute:null }) threw exception RangeError: minute must be "2-digit" or "numeric".
-PASS Intl.DateTimeFormat('en').resolvedOptions().minute is undefined
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric' }).resolvedOptions().minute is '2-digit'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric', timeZone: 'UTC' }).format(0) is '12:00 AM'
-PASS Intl.DateTimeFormat('en', { minute:'numeric', hour:'numeric' }).resolvedOptions().minute is '2-digit'
-PASS Intl.DateTimeFormat('en', { minute:'numeric', hour:'numeric', timeZone: 'UTC' }).format(0) is '12:00 AM'
-PASS Intl.DateTimeFormat('en', { second: { toString() { throw 'second' } } }) threw exception second.
-PASS Intl.DateTimeFormat('en', { second:'badvalue' }) threw exception RangeError: second must be "2-digit" or "numeric".
-PASS Intl.DateTimeFormat('en').resolvedOptions().second is undefined
-PASS Intl.DateTimeFormat('en', { minute:'numeric', hour:'numeric', second:'2-digit' }).resolvedOptions().second is '2-digit'
-PASS Intl.DateTimeFormat('en', { minute:'numeric', hour:'numeric', second:'2-digit', timeZone: 'UTC' }).format(0) is '12:00:00 AM'
-PASS Intl.DateTimeFormat('en', { minute:'numeric', hour:'numeric', second:'numeric' }).resolvedOptions().second is '2-digit'
-PASS Intl.DateTimeFormat('en', { minute:'numeric', hour:'numeric', second:'numeric', timeZone: 'UTC' }).format(0) is '12:00:00 AM'
-PASS Intl.DateTimeFormat('en', { timeZoneName: { toString() { throw 'timeZoneName' } } }) threw exception timeZoneName.
-PASS Intl.DateTimeFormat('en', { timeZoneName:'name' }) threw exception RangeError: timeZoneName must be "short" or "long".
-PASS Intl.DateTimeFormat('en').resolvedOptions().timeZoneName is undefined
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric', timeZoneName:'short' }).resolvedOptions().timeZoneName is 'short'
-PASS Intl.DateTimeFormat('en', { minute:'2-digit', hour:'numeric', timeZoneName:'short', timeZone: 'America/Los_Angeles' }).format(0) is '4:00 PM PST'
-PASS Intl.DateTimeFormat('pt-BR', { minute:'2-digit', hour:'numeric', timeZoneName:'long' }).resolvedOptions().timeZoneName is 'long'
-PASS Intl.DateTimeFormat('pt-BR', { minute:'2-digit', hour:'numeric', timeZoneName:'long', timeZone: 'america/sao_paulo' }).format(0) is '21:00 Horário Padrão de Brasília'
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ar-SA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ar-SA", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("be", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("be", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ca", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ca", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("cs", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("cs", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("da", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("da", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("de", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("de-CH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("de-CH", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("en", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-AU", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-AU", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-GB", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-GB", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-PH", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-PH", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("en-US", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("en-US", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("el", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("el", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("es", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-MX", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-MX", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("es-PR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("es-PR", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("fr-CA", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("fr-CA", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ga", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ga", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("hi-IN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("hi-IN", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("is", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("is", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("it", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("it", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("iw", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("iw", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ja", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ja", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ko-KR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ko-KR", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("lt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lt", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("lv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("lv", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("mk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mk", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ms", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ms", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("mt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("mt", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("nb", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nb", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("nl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("nl", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("no", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("no", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("pl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pl", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("pt-BR", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("pt-BR", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ro", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ro", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("ru", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("ru", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("sk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sk", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("sl", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sl", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("sr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sr", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("sv", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("sv", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("th", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("th", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("tr", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("tr", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("uk", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("uk", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("vi", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("vi", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-CN", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-CN", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-Hant-HK", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-Hant-HK", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { weekday: "short", year: "numeric", month: "short", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { year: "numeric", month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { year: "numeric", month: "long" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { year: "numeric", month: "long" }).format() === "string" is true
-PASS 
-    var options = { month: "long", day: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { month: "long", day: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric", second: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { hour: "numeric", minute: "numeric", second: "numeric" }).format() === "string" is true
-PASS 
-    var options = { hour: "numeric", minute: "numeric" };
-    var resolved = Intl.DateTimeFormat("zh-TW", options).resolvedOptions();
-    Object.keys(options).every(option => resolved[option] != null) is true
-PASS typeof Intl.DateTimeFormat("zh-TW", { hour: "numeric", minute: "numeric" }).format() === "string" is true
-PASS var legacy = Object.create(Intl.DateTimeFormat.prototype);Intl.DateTimeFormat.apply(legacy) is legacy
-PASS var legacy = Object.create(Intl.DateTimeFormat.prototype);Intl.DateTimeFormat.call(legacy, 'en-u-nu-arab', { timeZone: 'America/Los_Angeles' }).format(1451099872641) is '١٢/٢٥/٢٠١٥'
-PASS var incompat = {};Intl.DateTimeFormat.apply(incompat) is not incompat
-PASS Intl.DateTimeFormat.prototype.formatToParts is an instance of Function
-PASS Intl.DateTimeFormat.prototype.formatToParts.length is 1
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'formatToParts').writable is true
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'formatToParts').enumerable is false
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'formatToParts').configurable is true
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'formatToParts').get is undefined
-PASS Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'formatToParts').set is undefined
-PASS new Intl.DateTimeFormat().formatToParts({}) threw exception RangeError: date value is not finite in DateTimeFormat formatToParts().
-PASS new Intl.DateTimeFormat().formatToParts(NaN) threw exception RangeError: date value is not finite in DateTimeFormat formatToParts().
-PASS new Intl.DateTimeFormat().formatToParts(Infinity) threw exception RangeError: date value is not finite in DateTimeFormat formatToParts().
-PASS new Intl.DateTimeFormat().formatToParts(-Infinity) threw exception RangeError: date value is not finite in DateTimeFormat formatToParts().
-PASS new Intl.DateTimeFormat().formatToParts(new Date(NaN)) threw exception RangeError: date value is not finite in DateTimeFormat formatToParts().
-PASS JSON.stringify(
-  Intl.DateTimeFormat("pt-BR", {
-    hour: "numeric", minute: "numeric", second: "numeric",
-    year: "numeric", month: "numeric", day: "numeric",
-    timeZoneName: "short", era: "short", timeZone: "America/Sao_Paulo"
-  }).formatToParts(0).filter((part) => (part.type !== "literal"))
-) is JSON.stringify([
-  {"type":"day","value":"31"},
-  {"type":"month","value":"12"},
-  {"type":"year","value":"1969"},
-  {"type":"era","value":"d.C."},
-  {"type":"hour","value":"21"},
-  {"type":"minute","value":"00"},
-  {"type":"second","value":"00"},
-  {"type":"timeZoneName","value":"BRT"}
-])
-PASS Intl.DateTimeFormat("ar", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ar-SA", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("be", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ca", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("cs", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("da", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("de-CH", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-AU", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-GB", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-PH", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("en-US", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("el", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-MX", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("es-PR", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("fr-CA", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ga", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("hi-IN", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("is", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("it", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("iw", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ja", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ko-KR", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lt", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("lv", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mk", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ms", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("mt", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nb", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("nl", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("no", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pl", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("pt-BR", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ro", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("ru", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sk", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sl", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sr", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("sv", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("th", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("tr", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("uk", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("vi", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-CN", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-Hant-HK", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { weekday: "short", year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { weekday: "short", year: "numeric", month: "short", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { year: "numeric", month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { year: "numeric", month: "long" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { month: "long", day: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { hour: "numeric", minute: "numeric", second: "numeric" }).formatToParts() is an instance of Array
-PASS Intl.DateTimeFormat("zh-TW", { hour: "numeric", minute: "numeric" }).formatToParts() is an instance of Array
-PASS JSON.stringify(
-  Intl.DateTimeFormat('en-US', {
-    hour: "numeric", minute: "numeric", second: "numeric",
-    year: "numeric", month: "long", day: "numeric", weekday: "long",
-    timeZoneName: "long", era: "long", timeZone: "America/Los_Angeles"
-  }).formatToParts(0)
-) is JSON.stringify([
-  {"type":"weekday","value":"Wednesday"},
-  {"type":"literal","value":", "},
-  {"type":"month","value":"December"},
-  {"type":"literal","value":" "},
-  {"type":"day","value":"31"},
-  {"type":"literal","value":", "},
-  {"type":"year","value":"1969"},
-  {"type":"literal","value":" "},
-  {"type":"era","value":"Anno Domini"},
-  {"type":"literal","value":", "},
-  {"type":"hour","value":"4"},
-  {"type":"literal","value":":"},
-  {"type":"minute","value":"00"},
-  {"type":"literal","value":":"},
-  {"type":"second","value":"00"},
-  {"type":"literal","value":" "},
-  {"type":"dayPeriod","value":"PM"},
-  {"type":"literal","value":" "},
-  {"type":"timeZoneName","value":"Pacific Standard Time"}
-])
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
index 2484a05..b055e06 100644 (file)
@@ -481,6 +481,20 @@ webkit.org/b/200295 fast/viewport/ios/ [ Crash ]
 webkit.org/b/200295 fast/visual-viewport/client-coordinates-relative-to-layout-viewport.html [ Crash ]
 webkit.org/b/200295 fast/visual-viewport/client-rects-relative-to-layout-viewport.html [ Crash ]
 
+# Inspector tests don't work with platform WebSockets API
+webkit.org/b/200162 http/tests/websocket/tests/hybi/inspector/ [ Skip ]
+
+# Extensions not supported with platform WebSockets API
+webkit.org/b/199943 http/tests/websocket/tests/hybi/extensions.html [ Failure ]
+webkit.org/b/199943 http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html [ Failure ]
+webkit.org/b/199943 http/tests/websocket/tests/hybi/deflate-frame-parameter.html [ Failure ]
+
+# Server cookie not handled with platform WebSockets API
+webkit.org/b/200165 imported/w3c/web-platform-tests/websockets/cookies/002.html [ Failure ]
+webkit.org/b/200165 imported/w3c/web-platform-tests/websockets/cookies/007.html [ Failure ]
+
+webkit.org/b/200338 http/tests/websocket/tests/hybi/client-close.html [ Failure ]
+
 #////////////////////////////////////////////////////////////////////////////////////////
 # 3. UNRESOLVED TESTS
 #////////////////////////////////////////////////////////////////////////////////////////
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/broken-utf8-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/broken-utf8-expected.txt
new file mode 100644 (file)
index 0000000..2dbf4f8
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether WebSocket aborts the connection when it receives a text frame containing broken UTF-8 data.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-before-open-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-before-open-expected.txt
new file mode 100644 (file)
index 0000000..597239b
--- /dev/null
@@ -0,0 +1,10 @@
+Test if Web Socket fires close event when WebSocket is opened and closed fore open event is received.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+closed on test 1
+closed on test 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-code-and-reason-expected.txt
new file mode 100644 (file)
index 0000000..862e876
--- /dev/null
@@ -0,0 +1,82 @@
+Test CloseEvent code and reason property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+ws.onclose() was called.
+PASS closeEvent.wasClean is false
+PASS closeEvent.code is codeAbnormalClosure
+FAIL closeEvent.reason should be . Was WebSocket is closed before the connection is established..
+WebSocketTest.onopen() was called with testId = 0.
+WebSocketTest.onclose() was called with testId = 0.
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 1005
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 1005
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 1.
+WebSocketTest.onclose() was called with testId = 1.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 2.
+WebSocketTest.onclose() was called with testId = 2.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is 1000
+PASS closeEvent.reason is 'ok'
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is 1000
+PASS closeEvent.reason is 'ok'
+WebSocketTest.onopen() was called with testId = 3.
+WebSocketTest.onclose() was called with testId = 3.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 1005.
+FAIL closeEvent.reason should be . Was foo.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 1005.
+FAIL closeEvent.reason should be . Was foo.
+WebSocketTest.onopen() was called with testId = 4.
+WebSocketTest.onclose() was called with testId = 4.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 5.
+WebSocketTest.onclose() was called with testId = 5.
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+PASS typeof closeEvent.wasClean is 'boolean'
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS closeEvent.reason is ''
+WebSocketTest.onopen() was called with testId = 6.
+WebSocketTest.onclose() was called with testId = 6.
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 65535
+PASS closeEvent.reason is 'good bye'
+PASS typeof closeEvent.wasClean is 'boolean'
+FAIL closeEvent.wasClean should be true. Was false.
+PASS closeEvent.code is 65535
+PASS closeEvent.reason is 'good bye'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/close-expected.txt
new file mode 100644 (file)
index 0000000..56694e4
--- /dev/null
@@ -0,0 +1,110 @@
+CONSOLE MESSAGE: line 138: WebSocket close message is too long.
+CONSOLE MESSAGE: line 138: WebSocket close message is too long.
+Verify WebSocket::close behaviors.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Invalid code test: 0
+Code 999 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 1
+Code 1001 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 2
+Code 2999 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 3
+Code 5000 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 4
+Code 66536 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 5
+Code 4294968296 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 6
+Code 2999.9 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 7
+Code NaN must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 8
+Code 0 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 9
+Code 100 must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 10
+Code Infinity must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 11
+Code -Infinity must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+Invalid code test: 12
+Code NaN must cause InvalidAccessError.
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is invalidAccessErr
+PASS onerror was called.
+runCodeTest: onclose().
+PASS closeEvent.code is abnormalClosure
+Skip invalid string test.
+Reason test: 0
+  with invalid reason: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+Reason 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 must cause SyntaxError.
+PASS result is false
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is syntaxErr
+Reason test: 1
+  with invalid reason: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012©
+Reason 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012© must cause SyntaxError.
+PASS result is false
+PASS exceptionProto === DOMException.prototype is true
+PASS exceptionName is syntaxErr
+Reason test: 2
+PASS onerror was called.
+runReasonTest: onclose().
+PASS closeEvent.code is abnormalClosure
+Code and reason test: 0
+Code and reason must be
+  code  : 1000
+  reason: OK, Bye!
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+Code and reason test: 1
+Code and reason must be
+  code  : 3000
+  reason: 3000
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+Code and reason test: 2
+Code and reason must be
+  code  : 4000
+  reason: code is 4000
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+Code and reason test: 3
+Code and reason must be
+  code  : 4999
+  reason: © Google
+PASS closeEvent.wasClean is true
+PASS closeEvent.code is code
+PASS closeEvent.reason is reason
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/closed-when-entering-page-cache-expected.txt
new file mode 100644 (file)
index 0000000..25ce5ab
--- /dev/null
@@ -0,0 +1,20 @@
+Test that an open WebSocket does not prevent a page from entering page cache.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+pageshow - not from cache
+pagehide - entering cache
+pageshow - from cache
+PASS Page did enter and was restored from the page cache
+PASS error event fired
+PASS wasRestoredFromPageCache is true
+PASS close event fired
+PASS wasRestoredFromPageCache is true
+PASS receivedErrorEvent is true
+PASS closeEvent.wasClean is false
+FAIL closeEvent.code should be 1006. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt
new file mode 100644 (file)
index 0000000..cb3ca8b
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether a compressed control frame is rejected
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404-expected.txt
new file mode 100644 (file)
index 0000000..a81c036
--- /dev/null
@@ -0,0 +1,10 @@
+Test that readyState is CLOSED within onerror event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onerror() was called.
+PASS ws.readyState is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/fragmented-control-frame-expected.txt
new file mode 100644 (file)
index 0000000..1c090b2
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket rejects a fragmented control frame and aborts the connection.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-error-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-error-expected.txt
new file mode 100644 (file)
index 0000000..2abf016
--- /dev/null
@@ -0,0 +1,10 @@
+Handshake error test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Closed.
+PASS ws.readyState is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt
new file mode 100644 (file)
index 0000000..264eb0b
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends Sec-WebSocket-Extensions header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-invalid-http-version-expected.txt
new file mode 100644 (file)
index 0000000..2159405
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends status line with invalid http version.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-maxlength-expected.txt
new file mode 100644 (file)
index 0000000..2ec7ce9
--- /dev/null
@@ -0,0 +1,11 @@
+Connection should fail immediately, rather than succeeding or staying in limbo until timeout, if handshake is longer than 1024 bytes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS timedOut is false
+PASS connected is false
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header-expected.txt
new file mode 100644 (file)
index 0000000..28f70ae
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether WebSocket handshake fails if the server sends mismatched Sec-WebSocket-Protocol header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS closeEvent.wasClean is false
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header-expected.txt
new file mode 100644 (file)
index 0000000..2bfdb47
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if there are more one Sec-WebSocket-Accept header field in the response.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header-expected.txt
new file mode 100644 (file)
index 0000000..a287361
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if there are more than one Sec-WebSocket-Extensions header field in the response..
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header-expected.txt
new file mode 100644 (file)
index 0000000..f5f0809
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if there are more than one Sec-WebSocket-Protocol header field in the response.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-accept-header-expected.txt
new file mode 100644 (file)
index 0000000..4b4bcd3
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server does not send Sec-WebSocket-Accept header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-connection-header-expected.txt
new file mode 100644 (file)
index 0000000..bfabd83
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if Connection header field isn't reflected by the server.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-cr-expected.txt
new file mode 100644 (file)
index 0000000..f6694de
--- /dev/null
@@ -0,0 +1,12 @@
+Handshake should fail when the first line does not end with CRLF.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Connected
+Timed out (state = 1)
+FAIL connected should be false. Was true.
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-no-upgrade-header-expected.txt
new file mode 100644 (file)
index 0000000..386539f
--- /dev/null
@@ -0,0 +1,8 @@
+Test that WebSocket handshake fails if Upgrade header field isn't reflected by the server.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-accept-expected.txt
new file mode 100644 (file)
index 0000000..17273c7
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends header with non-ascii characters in name.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-extensions-expected.txt
new file mode 100644 (file)
index 0000000..146cc86
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends a WebSocket extensions header with non-ascii characters in its value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-header-value-sec-websocket-protocol-expected.txt
new file mode 100644 (file)
index 0000000..ec69fd3
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends a WebSocket protocol header with non-ascii characters in its value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-non-ascii-status-line-expected.txt
new file mode 100644 (file)
index 0000000..1e49c92
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends status line with non-ascii characters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-null-char-in-status-expected.txt
new file mode 100644 (file)
index 0000000..b659a81
--- /dev/null
@@ -0,0 +1,11 @@
+Connection should fail immediately, rather than succeeding or staying in limbo until timeout, if a null byte is received in the status header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS timedOut is false
+PASS connected is false
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-prepended-null-expected.txt
new file mode 100644 (file)
index 0000000..b91be35
--- /dev/null
@@ -0,0 +1,11 @@
+Connection should fail immediately, rather than succeeding or staying in limbo until timeout, if a null byte is received before the handshake.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS timedOut is false
+PASS connected is false
+PASS wsOrigin is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-fail-by-wrong-accept-header-expected.txt
new file mode 100644 (file)
index 0000000..8719188
--- /dev/null
@@ -0,0 +1,9 @@
+Test whether WebSocket handshake fails if the server sends incorrect Sec-WebSocket-Accept header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1-expected.txt
new file mode 100644 (file)
index 0000000..da3137f
--- /dev/null
@@ -0,0 +1,11 @@
+Test http version parsing and validation. HTTP version 1.1 and above should be accepted for WebSockets.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+FAIL The following URL should have been allowed to be opened: ws://localhost:8880/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1?1.11
+FAIL The following URL should have been allowed to be opened: ws://localhost:8880/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1?11.0
+FAIL At least one test failed.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/interleaved-fragments-expected.txt
new file mode 100644 (file)
index 0000000..e88d094
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket rejects interleaved fragmented frames.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-continuation-expected.txt
new file mode 100644 (file)
index 0000000..f620c60
--- /dev/null
@@ -0,0 +1,11 @@
+Test whether WebSocket aborts the connection when it receives an unexpected continuation frame without any leading text or binary frame.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-encode-length-expected.txt
new file mode 100644 (file)
index 0000000..6b7081f
--- /dev/null
@@ -0,0 +1,24 @@
+Test whether WebSocket aborts the connection when it receives an unexpected encoding length frame.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Case 126_125: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case 126_0: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case 127_65535: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case 127_0: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/invalid-masked-frames-from-server-expected.txt
new file mode 100644 (file)
index 0000000..895e69b
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket aborts the connection when it receives an masked frames from server.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/long-control-frame-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/long-control-frame-expected.txt
new file mode 100644 (file)
index 0000000..e6364a7
--- /dev/null
@@ -0,0 +1,10 @@
+Test whether WebSocket rejects control frames longer than 125 bytes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/long-invalid-header-expected.txt
new file mode 100644 (file)
index 0000000..6bbdc7c
--- /dev/null
@@ -0,0 +1,9 @@
+Make sure WebSocket gives errors on long invalid upgrade header.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+WebSocket is closed
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt
new file mode 100644 (file)
index 0000000..5e582b4
--- /dev/null
@@ -0,0 +1,4 @@
+ALERT: Created a socket to 'ws://127.0.0.1:8880/websocket/tests/hybi/slow-reply'; readyState 0.
+ALERT: Terminating network process.
+ALERT: Received error:[object Event]
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/reserved-bits-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/reserved-bits-expected.txt
new file mode 100644 (file)
index 0000000..c6432a3
--- /dev/null
@@ -0,0 +1,28 @@
+Test whether WebSocket rejects frames whose reserved bit is on.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Case compressed=false&bitNumber=1: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=false&bitNumber=2: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=false&bitNumber=3: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=true&bitNumber=2: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Case compressed=true&bitNumber=3: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/reserved-opcodes-expected.txt
new file mode 100644 (file)
index 0000000..4ef26d1
--- /dev/null
@@ -0,0 +1,48 @@
+Tests whether WebSocket ignores frames with reserved opcode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Opcode 3: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 4: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 5: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 6: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 7: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 11: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 12: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 13: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 14: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+Opcode 15: Test started.
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/secure-cookie-secure-connection-expected.txt
new file mode 100644 (file)
index 0000000..272f364
--- /dev/null
@@ -0,0 +1,15 @@
+Test WebSocket sends Secure cookies over secure connections.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Note: mod_pywebsocket does not send secure cookies ('see FIXMEs in mod_pywebsocket code'), so this test is expected to FAIL to return WK-websocket-test-secure=1 until that bug is fixed.
+
+See pywebsocket Bug 150 for details.
+
+WebSocket open
+WebSocket closed
+FAIL cookie should be WK-websocket-test-secure=1; WK-websocket-test=1. Was WK-websocket-test=1.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/send-object-tostring-check-expected.txt
new file mode 100644 (file)
index 0000000..46ce95d
--- /dev/null
@@ -0,0 +1,10 @@
+WebSocket: Object's toString method should be called only once.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS testObj.callCounter is 1
+FAIL closeEvent.wasClean should be true. Was false.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/simple-wss-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/simple-wss-expected.txt
new file mode 100644 (file)
index 0000000..be511b2
--- /dev/null
@@ -0,0 +1,12 @@
+Simple secure Web Socket test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Created a socket to 'wss://127.0.0.1:9323/websocket/tests/hybi/simple'; readyState 0.
+Connected; readyState 1
+Received: 'Hello from Simple WSH.'; readyState 1
+Timed out in state: 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler-expected.txt
new file mode 100644 (file)
index 0000000..5067f75
--- /dev/null
@@ -0,0 +1,15 @@
+Tests that WebSocket correctly handles being stopped in the error event handler upon restoring from PageCache.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+pageshow - not from cache
+pagehide - entering cache
+pageshow - from cache
+PASS Page did enter and was restored from the page cache
+error event fired
+PASS wasRestoredFromPageCache is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/too-long-payload-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/too-long-payload-expected.txt
new file mode 100644 (file)
index 0000000..3b7139e
--- /dev/null
@@ -0,0 +1,11 @@
+Tests whether WebSocket correctly aborts the connection when it receives a frame with too long payload.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+onopen() was called.
+onclose() was called.
+PASS closeEvent.wasClean is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-allowed-setting-cookie-as-third-party-expected.txt
new file mode 100644 (file)
index 0000000..93b212b
--- /dev/null
@@ -0,0 +1,19 @@
+Tests WebSocket Set-Cookie behavior for third-parties with existing cookies.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS document.location.host is "127.0.0.1:8000"
+
+Setting third-party cookie 'foo' through cross-origin WebSocket handshake.
+
+Opening localhost third-party iframe to check its cookies.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+--------
+Frame: '<!--frame1-->'
+--------
+Cookies are: setAsFirstParty = value
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior-expected.txt
new file mode 100644 (file)
index 0000000..9b1ed0a
--- /dev/null
@@ -0,0 +1,18 @@
+Tests WebSocket Set-Cookie overwriting behavior with respect to a document cookie.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Setting third-party cookie 'foo' through cross-origin WebSocket handshake and checking that it doesn't write first-party cookies.
+PASS cookieValue is ""
+
+Opening localhost third-party iframe to check its cookies.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+--------
+Frame: '<!--frame1-->'
+--------
+Cookies are: setAsFirstParty = value
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/websocket-event-target-expected.txt
new file mode 100644 (file)
index 0000000..95b1ddd
--- /dev/null
@@ -0,0 +1,17 @@
+Make sure WebSocket object acts as EventTarget.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS open_event_handled is false
+PASS message_event_handled is false
+PASS close_event_handled is false
+PASS open_event_handled is true
+PASS open_event_handled is false
+PASS message_event_handled is true
+PASS message_event_handled is false
+PASS close_event_handled is true
+PASS close_event_handled is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/workers/close-code-and-reason-expected.txt
new file mode 100644 (file)
index 0000000..ed9f0c2
--- /dev/null
@@ -0,0 +1,69 @@
+Test CloseEvent code and reason property in Worker.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+ws.onclose() was called.
+PASS PASS: worker: event.wasClean is false
+PASS PASS: worker: event.code is codeAbnormalClosure
+FAIL FAIL: worker: event.reason is not emptyString
+WebSocketTest.onopen() was called with testId = 0.
+WebSocketTest.onclose() was called with testId = 0.
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 1005
+PASS PASS: worker: event.reason is 
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 1005
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 1.
+WebSocketTest.onclose() was called with testId = 1.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 2.
+WebSocketTest.onclose() was called with testId = 2.
+PASS PASS: worker: event.wasClean is true
+PASS PASS: worker: event.code is 1000
+PASS PASS: worker: event.reason is ok
+PASS PASS: worker: event.wasClean is true
+PASS PASS: worker: event.code is 1000
+PASS PASS: worker: event.reason is ok
+WebSocketTest.onopen() was called with testId = 3.
+WebSocketTest.onclose() was called with testId = 3.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+FAIL FAIL: worker: event.reason is not 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+FAIL FAIL: worker: event.reason is not 
+WebSocketTest.onopen() was called with testId = 4.
+WebSocketTest.onclose() was called with testId = 4.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 5.
+WebSocketTest.onclose() was called with testId = 5.
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+PASS PASS: worker: event.wasClean is false
+FAIL FAIL: worker: event.code is not 1006
+PASS PASS: worker: event.reason is 
+WebSocketTest.onopen() was called with testId = 6.
+WebSocketTest.onclose() was called with testId = 6.
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 65535
+PASS PASS: worker: event.reason is good bye
+FAIL FAIL: worker: event.wasClean is not true
+PASS PASS: worker: event.code is 65535
+PASS PASS: worker: event.reason is good bye
+DONE
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/workers/close-expected.txt b/LayoutTests/platform/wpe/http/tests/websocket/tests/hybi/workers/close-expected.txt
new file mode 100644 (file)
index 0000000..3ee4d81
--- /dev/null
@@ -0,0 +1,94 @@
+Verify WebSocket::close behaviors in Worker.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Invalid code test: 0
+Code 999 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 1
+Code 1001 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 2
+Code 2999 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 3
+Code 5000 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 4
+Code 66536 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 5
+Code 4294968296 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 6
+Code 2999.9 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 7
+Code NaN must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 8
+Code 0 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 9
+Code 100 must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 10
+Code Infinity must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 11
+Code -Infinity must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+Invalid code test: 12
+Code NaN must cause InvalidAccessError.
+PASS PASS: worker: exceptionName is invalidAccessErr
+PASS PASS: onerror() was called.
+runCodeTest: onclose().
+PASS PASS: worker: closeEvent.code is abnormalClosure
+Skip invalid string test.
+Reason test: 0
+  with invalid reason: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+Reason 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 must cause SyntaxError.
+PASS PASS: worker: result is false
+PASS PASS: worker: exceptionName is syntaxErr
+Reason test: 1
+  with invalid reason: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012©
+Reason 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012© must cause SyntaxError.
+PASS PASS: worker: result is false
+PASS PASS: worker: exceptionName is syntaxErr
+Reason test: 2
+PASS PASS: onerror() was called.
+runReasonTest: onclose().
+PASS PASS: worker: closeEvent.code is abnormalClosure
+Code and reason test: 0
+Code and reason must be
+  code  : 1000
+  reason: OK, Bye!
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+Code and reason test: 1
+Code and reason must be
+  code  : 3000
+  reason: 3000
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+Code and reason test: 2
+Code and reason must be
+  code  : 4000
+  reason: code is 4000
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+Code and reason test: 3
+Code and reason must be
+  code  : 4999
+  reason: © Google
+PASS PASS: worker: closeEvent.wasClean is true
+PASS PASS: worker: closeEvent.code is code
+PASS PASS: worker: closeEvent.reason is reason
+DONE
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/websockets/Create-valid-url-protocol-empty.any-expected.txt